【问题标题】: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 字符串 是什么?

标签: go struct


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多