结构声明中的文字值
Literal value in struct declaration
假设我们有这样一个结构:
type Foo struct {
one string
two int
}
是否可以为此声明文字值,例如:
type Foo struct {
one "foobar"
two int
}
或
type Foo struct {
one string
two 5678
}
基本上对于某些对象,我们可能有一个字段的硬编码值。
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>()
的函数。此函数 returns 一个新对象,每个定义的字段都有默认值。
值得注意的例外,对于从匿名结构创建的对象,可以在声明时指定字段的默认值。即
obj := struct {
one string
two int
}{
"default value for one",
2,
}
不,Go 不支持文字类型(a la TypeScript)。而且,它实际上不能,因为零值。
每个类型都有一个零值,总是存在并且总是可以分配给它.当声明一个类型的变量时,它们被隐式分配给它们类型的零值。
对于整数(int
、uint
、int32
、uint32
、int64
、uin64
)或float (float32
, float64
) 或 complex (complex64
or complex128
) 类型,这只是 0
(分别为 0.0
)。
对于字符串类型,这是空字符串""
。
对于切片、映射、指针、通道和接口,零值为nil
。
对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值
struct类型的零值是一个所有字段都是零值的结构
在任何情况下,因为任何类型总是可能有零值,所以创建一个只允许任何特定非零值的类型是不兼容的。
最好的文字类型 "foo"
可能表示的是值是 "foo"
或零值 ""
(不,Go 无论如何都不支持这个) .
您最接近的是 const
ant 声明,或者恰好 [=70=] 固定值而不是实际字段的接收函数。
假设我们有这样一个结构:
type Foo struct {
one string
two int
}
是否可以为此声明文字值,例如:
type Foo struct {
one "foobar"
two int
}
或
type Foo struct {
one string
two 5678
}
基本上对于某些对象,我们可能有一个字段的硬编码值。
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>()
的函数。此函数 returns 一个新对象,每个定义的字段都有默认值。
值得注意的例外,对于从匿名结构创建的对象,可以在声明时指定字段的默认值。即
obj := struct {
one string
two int
}{
"default value for one",
2,
}
不,Go 不支持文字类型(a la TypeScript)。而且,它实际上不能,因为零值。
每个类型都有一个零值,总是存在并且总是可以分配给它.当声明一个类型的变量时,它们被隐式分配给它们类型的零值。
对于整数(
int
、uint
、int32
、uint32
、int64
、uin64
)或float (float32
,float64
) 或 complex (complex64
orcomplex128
) 类型,这只是0
(分别为0.0
)。对于字符串类型,这是空字符串
""
。对于切片、映射、指针、通道和接口,零值为
nil
。对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值
struct类型的零值是一个所有字段都是零值的结构
在任何情况下,因为任何类型总是可能有零值,所以创建一个只允许任何特定非零值的类型是不兼容的。
最好的文字类型 "foo"
可能表示的是值是 "foo"
或零值 ""
(不,Go 无论如何都不支持这个) .
您最接近的是 const
ant 声明,或者恰好 [=70=] 固定值而不是实际字段的接收函数。