假设我们有这样一个结构:
type Foo struct {
one string
two int
}
是否可以为此声明文字值,例如:
type Foo struct {
one "foobar"
two int
}
或
type Foo struct {
one string
two 5678
}
基本上对于某些对象,我们可能有一个字段的硬编码值。
最佳答案
不,Go 不支持文字类型(a la TypeScript)。此外,它实际上不能,因为零值。
每个类型都有一个零值,它总是存在并且总是可以分配给它。当声明一个类型的变量时,它们被隐式分配给它们类型的零值。
对于整数 (
int
,uint
,int32
,uint32
,int64
,uin64
) 或 float (float32
,float64
) 或复数 (complex64
或complex128
) 类型,这只是0
(分别为0.0
)。对于字符串类型,这是空字符串
""
。对于 slice 、映射、指针、 channel 和接口(interface),零值为
nil
。对于数组(不是 slice :数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值
struct 类型的零值是其所有字段都为零值的结构
在任何情况下,因为任何类型总是可能有零值,所以创建一个只允许任何特定非零值的类型是不兼容的。
最好的文字类型 "foo"
可能表示的是值是 "foo"
或零值 ""
(不,Go 无论如何都不支持这个)。
最接近的做法是 const
ant 声明,或者恰好返回固定值而不是实际字段的接收函数。
关于go - 结构声明中的文字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331638/