如何将空值设置为结构的默认值

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

【问题讨论】:

为什么你认为有一个“默认值”,你认为nilstring类型的变量中意味着什么? 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

【讨论】:

以上是关于如何将空值设置为结构的默认值的主要内容,如果未能解决你的问题,请参考以下文章

将空值设置为缺失表字段的默认值

将空值设置为列表中最接近的最后一个非空值 - LINQ

Prometheus 来源的时间序列:如何将空值设置为零?

如何使用 LINQ 将空值发送到 ASP.NET 中的非空列

使用支持对象/结构的泛型时如何返回空值/默认值? [复制]

无法将空对象设置为 Record 类型的参数的默认值