如何将空值设置为结构的默认值
Posted
技术标签:
【中文标题】如何将空值设置为结构的默认值【英文标题】:How can I set null value as default to struct 【发布时间】:2021-01-26 12:37:10 【问题描述】:我正在尝试将空值添加为结构的默认值。有什么办法可以将 null 添加为默认值?
type Values struct
FirstValue string `default:"My First Value"`
SecondValue string `default:nil` // something like that
【问题讨论】:
为什么你认为有一个“默认值”,你认为nil
在string
类型的变量中意味着什么?
string
不能是 nil
。 go 是一种静态类型语言。
兄弟@torek 我问有什么办法吗?我是 GO 的新手,我不确定默认值或将 nil 值分配给字符串。那就是我在问有什么办法吗?
我想知道,因为没有多少语言甚至有“默认值”的概念:可能有默认 constructors 但没有默认 values 和您必须编写一个构造函数。您可以在 Go 中执行此操作,只是不会自动调用。同时,字符串是计数字节序列,那么 nil 字符串 是什么?
【参考方案1】:
Go 中的字符串不能是 nil
。它们的零值只是一个空字符串 - ""
。
见https://tour.golang.org/basics/12
此外,Go 中没有default
标签,因为每种类型都有一个零值,用作“默认值”。但是,Go 中有一些模式允许您设置不同的“默认”值,请参阅How to set default values in Go structs。
【讨论】:
难道我们要忽略没有default
标签的事实吗?
brother @super 我是新手,我不知道。有没有其他方式或者其他数据类型可以同时使用string和nil?【参考方案2】:
在 Go 中,您无法访问未初始化的内存。如果在变量声明中不提供初始值,变量会自动初始化为其类型的zero value。
此外,您不能为结构字段定义默认值。除非用 composite literal 给出,否则所有字段都将获得零值。
string
类型的零值是空字符串""
。如果需要存储空值,请使用指向string
的指针。指针的零值是nil
:
type Values struct
FirstValue string
SecondValue *string
【讨论】:
以上是关于如何将空值设置为结构的默认值的主要内容,如果未能解决你的问题,请参考以下文章