vod*_*095 82
一个可能的想法是编写单独的构造函数
//Something is the structure we work with
type Something struct {
Text string
DefaultText string
}
// NewSomething create new instance of Something
func NewSomething(text string) Something {
something := Something{}
something.Text = text
something.DefaultText = "default text"
return something
}
Run Code Online (Sandbox Code Playgroud)
- @Prateek是的,你可以强迫人们使用这个构造函数,如果你只是让类型本身未导出.您可以导出函数`NewSomething`甚至是`Text`和`DefaultText`字段,但只是不导出struct类型`something`. (25认同)
- 是的,这是我在答案中也提到的方法之一,但我们无法强迫任何人只使用此功能. (5认同)
- 问题更严重......如果使用第三方(例如库)来实例化您的结构(例如,通过`reflect.New()`),则不能期望它知道您的特别命名工厂功能。在那种情况下,如果没有改变语言本身,我认为*只有*一个接口(库可以检查)会做。 (2认同)
- 设置默认值很好,但有时,我可能想覆盖默认值。在这种情况下,我将无法使用非默认值初始化结构。对我来说有点烦 (2认同)