为结构字段分配默认值

huangapple go评论85阅读模式
英文:

Assign default value for struct field

问题

我想在Go语言中为结构体字段分配默认值。我不确定是否可能,但是在创建/初始化结构体对象时,如果我没有为字段分配任何值,我希望它从默认值中分配。有什么办法可以实现吗?

type abc struct {
    prop1 int
    prop2 int  // 默认值: 0
}
obj := abc{prop1: 5}
// 这里我希望 obj.prop2 的值为 0

你可以在定义结构体时为字段指定默认值。在这种情况下,如果在创建结构体对象时没有为字段赋值,它们将被自动初始化为默认值。在你的例子中,prop2 的默认值已经是 0,所以你不需要额外的代码来实现这个需求。当你创建 obj 对象时,prop2 的值将自动设置为 0。

英文:

I want to assign default value for struct field in Go. I am not sure if it is possible but while creating/initializing object of the struct, if I don't assign any value to the field, I want it to be assigned from default value. Any idea how to achieve it?

type abc struct {
    prop1 int
    prop2 int  // default value: 0
}
obj := abc{prop1: 5}
// here I want obj.prop2 to be 0

答案1

得分: 22

这是不可能的。你能做的最好的办法是使用构造函数方法:

type abc struct {
    prop1 int
    prop2 int  // 默认值:0
}

func New(prop1 int) abc {
    return abc{
        prop1: prop1,
        prop2: someDefaultValue,
    }
}

但是请注意,Go语言中的所有值都会自动默认为它们的零值。int类型的零值已经是0了。所以如果你想要的默认值就是0,你已经免费得到了它。只有当你想要某个类型的非零默认值时,才需要使用构造函数。

英文:

This is not possible. The best you can do is use a constructor method:

type abc struct {
    prop1 int
    prop2 int  // default value: 0
}

func New(prop1 int) abc {
    return abc{
        prop1: prop1,
        prop2: someDefaultValue,
    }
}

But also note that all values in Go automatically default to their zero value. The zero value for an int is already 0. So if the default value you want is literally 0, you already get that for free. You only need a constructor if you want some default value other than the zero value for a type.

huangapple
  • 本文由 发表于 2017年8月16日 17:43:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/45710188.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定