说我们有一个像这样的结构:
type Foo struct {
one string
two int
}
是否可以为此声明文字值,例如:
type Foo struct {
one "foobar"
two int
}
或
type Foo struct {
one string
two 5678
}
基本上,对于某些对象,我们可能具有字段的硬编码值。
答案 0 :(得分:3)
否,Go不支持文字类型(例如TypeScript)。而且,由于零值,它实际上不能。
每种类型都有一个零值,该值总是存在,并且可以总是分配给它。声明类型的变量时,会将它们隐式分配给其类型的零值。
对于整数(int
,uint
,int32
,uint32
,int64
,uin64
)或浮点数({{ 1}},float32
)或复杂(float64
或complex64
)类型,它们只是complex128
(分别为0
)。
对于字符串类型,这是空字符串0.0
。
对于切片,地图,指针,通道和接口,零值为""
。
对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值就是重复填充每个插槽的元素类型的零值
结构类型的零值为所有字段均为零的结构
在任何情况下,由于任何类型总是有可能具有零值,因此创建仅允许任何特定非零值的类型将是不兼容的。
文字类型nil
可能最好地表示的是值是"foo"
或零值"foo"
(不,Go始终不支持此功能)。 / p>
您将能够执行的最接近的操作是""
ant声明,或者是一个接收函数,刚好会返回固定值而不是实际字段。
答案 1 :(得分:2)
Go是静态类型的语言,这意味着每个变量都需要使用特定的数据类型声明。
在Go中无法在声明时为结构内部的每个字段设置默认值。不支持。
但是也许你可以做这样的事情。
type Foo struct {
one string
two int
}
func NewFoo() *Foo {
foo := new(Foo)
foo.one = "default value for one"
foo.two = 2
return foo
}
func main() {
objectWithDefaultValueForItsField := NewFoo()
}
我所做的基本上只是创建了一个名称为
New<struct name>()
的函数。该函数为定义的每个字段返回一个默认值的新对象。
值得注意的例外,对于从匿名结构创建的对象,可以在声明时指定字段的默认值。即
obj := struct {
one string
two int
}{
"default value for one",
2,
}