结构声明中的文字值

时间:2018-11-16 04:51:01

标签: go struct default-value

说我们有一个像这样的结构:

type Foo struct {
  one string
  two int
}

是否可以为此声明文字值,例如:

type Foo struct {
  one "foobar"
  two int
}

type Foo struct {
  one string
  two 5678
}

基本上,对于某些对象,我们可能具有字段的硬编码值。

2 个答案:

答案 0 :(得分:3)

否,Go不支持文字类型(例如TypeScript)。而且,由于零值,它实际上不能

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

  • 对于整数(intuintint32uint32int64uin64)或浮点数({{ 1}},float32)或复杂(float64complex64)类型,它们只是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,
}