是否有结构类型的构造函数接口?

时间:2015-09-24 18:18:00

标签: go constructor

在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;是我的问题。我可以添加一个接口吗?

2 个答案:

答案 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这样的包级别方法执行启动和返回以及实例是很常见的。