2 回答
TA贡献2011条经验 获得超2个赞
不,Go 不支持文字类型(a la TypeScript)。而且,它实际上不能,因为零值。
每个类型都有一个零值,它总是存在并且总是可以分配给它。当声明一个类型的变量时,它们被隐式分配给它们类型的零值。
对于整数 (
int
,uint
,int32
,uint32
,int64
,uin64
) 或浮点数 (float32
,float64
) 或复数 (complex64
或complex128
) 类型,这只是0
(0.0
分别)。对于字符串类型,这是空字符串
""
。对于切片、映射、指针、通道和接口,零值为
nil
.对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值
结构类型的零值是其所有字段均为零值的结构
在任何情况下,因为任何类型总是可能有一个零值,所以创建一个只允许任何特定非零值的类型是不兼容的。
最好的字面量类型"foo"
可能代表的是该值要么是"foo"
零值""
(不,Go 无论如何都不支持这个)。
您能做的最接近的是const
ant 声明,或者恰好返回固定值而不是实际字段的接收函数。
TA贡献1786条经验 获得超12个赞
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()
}
我所做的基本上只是创建了一个名为 is 的函数
New<struct name>()。此函数为每个定义的字段返回一个具有默认值的新对象。
值得注意的例外,对于从匿名结构创建的对象,可以在声明时指定字段的默认值。IE
obj := struct {
one string
two int
}{
"default value for one",
2,
}
- 2 回答
- 0 关注
- 103 浏览
添加回答
举报