go - 结构声明中的文字值

标签 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
}

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

最佳答案

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

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

  • 对于整数 (int, uint, int32, uint32, int64, uin64) 或 float (float32, float64) 或复数 (complex64complex128 ) 类型,这只是 0(分别为 0.0)。

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

  • 对于 slice 、映射、指针、 channel 和接口(interface),零值为nil

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

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

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

最好的文字类型 "foo" 可能表示的是值是 "foo" 或零值 "" (不,Go 无论如何都不支持这个)。

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

关于go - 结构声明中的文字值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331638/

相关文章:

java - 多线程程序没有加速

pointers - 默认情况下,指针是否在方法内部取消引用?

http - http请求是否自动重试?

go - 使用 golang 从 S3 读取多个文件

C - 将字符串从一个结构复制到节点时出现问题

c - 将 sizeof 与具有固定长度数组的结构一起使用

C 结构指针作为参数

c - 变量默认值

mysql - 我可以设置在 MySQL 上自动递增的 id 的默认整数值吗?

asp.net-mvc-3 - MVC3 从模型中设置文本框的默认值