结构声明中的文字值

假设我们有一个这样的结构:


type Foo struct {

  one string

  two int

}

是否可以为此声明文字值,例如:


type Foo struct {

  one "foobar"

  two int

}

或者


type Foo struct {

  one string

  two 5678

}

基本上对于某些对象,我们可能有一个字段的硬编码值。


达令说
浏览 86回答 2
2回答

森林海

不,Go 不支持文字类型(a la TypeScript)。而且,它实际上不能,因为零值。每个类型都有一个零值,它总是存在并且总是可以分配给它。当声明一个类型的变量时,它们被隐式分配给它们类型的零值。对于整数 ( int, uint, int32, uint32, int64, uin64) 或浮点数 ( float32, float64) 或复数 (complex64或complex128) 类型,这只是0(0.0分别)。对于字符串类型,这是空字符串""。对于切片、映射、指针、通道和接口,零值为nil.对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值结构类型的零值是其所有字段均为零值的结构在任何情况下,因为任何类型总是可能有一个零值,所以创建一个只允许任何特定非零值的类型是不兼容的。最好的字面量类型"foo"可能代表的是该值要么是"foo"零值""(不,Go 无论如何都不支持这个)。您能做的最接近的是constant 声明,或者恰好返回固定值而不是实际字段的接收函数。

开满天机

Go 是静态类型语言,这意味着每个变量都需要用特定的数据类型声明。在 Go 中不可能在声明中为结构中的每个字段设置默认值。它不受支持。但也许你可以做这样的事情。type Foo struct {&nbsp; &nbsp; one string&nbsp; &nbsp; two int}func NewFoo() *Foo {&nbsp; &nbsp; foo := new(Foo)&nbsp; &nbsp; foo.one = "default value for one"&nbsp; &nbsp; foo.two = 2&nbsp; &nbsp; return foo}func main() {&nbsp; &nbsp; objectWithDefaultValueForItsField := NewFoo()}我所做的基本上只是创建了一个名为 is 的函数New<struct name>()。此函数为每个定义的字段返回一个具有默认值的新对象。值得注意的例外,对于从匿名结构创建的对象,可以在声明时指定字段的默认值。IEobj := struct {&nbsp; &nbsp; one string&nbsp; &nbsp; two int}{&nbsp; &nbsp; "default value for one",&nbsp; &nbsp; 2,}
打开App,查看更多内容
随时随地看视频慕课网APP