为了账号安全,请及时绑定邮箱和手机立即绑定

结构声明中的文字值

结构声明中的文字值

Go
达令说 2023-05-08 16:14:15
假设我们有一个这样的结构:type Foo struct {  one string  two int}是否可以为此声明文字值,例如:type Foo struct {  one "foobar"  two int}或者type Foo struct {  one string  two 5678}基本上对于某些对象,我们可能有一个字段的硬编码值。
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

不,Go 不支持文字类型(a la TypeScript)。而且,它实际上不能,因为零值

每个类型都有一个零值,它总是存在并且总是可以分配给它。当声明一个类型的变量时,它们被隐式分配给它们类型的零值。

  • 对于整数 ( intuintint32uint32int64uin64) 或浮点数 ( float32float64) 或复数 (complex64complex128) 类型,这只是0(0.0分别)。

  • 对于字符串类型,这是空字符串""

  • 对于切片、映射、指针、通道和接口,零值为nil.

  • 对于数组(不是切片:数组是具有静态已知长度的值类型);它们的零值只是重复填充每个槽的元素类型的零值

  • 结构类型的零值是其所有字段均为零值的结构

在任何情况下,因为任何类型总是可能有一个零值,所以创建一个只允许任何特定非零值的类型是不兼容的。

最好的字面量类型"foo"可能代表的是该值要么是"foo"零值""(不,Go 无论如何都不支持这个)。

您能做的最接近的是constant 声明,或者恰好返回固定值而不是实际字段的接收函数。


查看完整回答
反对 回复 2023-05-08
?
开满天机

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,

}


查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信