在golang中,我说有一种类型需要在使用之前对其进行一些设置,而不仅仅是设置默认值。例如:
type dice struct {
input string
count int
sides int
result int
}
func (d *dice) Roll() {
//initialize random seed
rand.Seed(time.Now().UnixNano())
for i := 0; i < d.count; i++ {
d.result = d.result + rand.Intn(d.sides)+1)
}
}
简单示例,但是如果我想在创建“骰子”的实例时自动调用d.Roll()。类型有没有办法做到这一点?更符合我试图解决的问题,比如我想在我调用Roll()之前自动调用rand.Seed(time.Now(。。UnixNano())位是否有一种惯用的golang方式这样做?
基本上&#34;你如何处理golang中的构造函数?&#34;是我的问题。我可以添加一个接口吗?
答案 0 :(得分:1)
不,Go不提供这种界面。你不能像在C ++中那样使用构造函数。
目前的习惯用法是创建一个函数
NewX(args...) X // or *X
您可以根据需要设置结构。在您的情况下,它可能如下所示:
func NewDice() dice {
var d dice
d.Roll()
return d
}
答案 1 :(得分:0)
没有。但常见的,我会说惯用的事情是在你的包中放一个func NewDice() dice
然后你可以调用它来获取一个实例。你在那里设置。它与构造函数的用途相同。像NewMyType
这样的包级别方法执行启动和返回以及实例是很常见的。