Ibolit
Ibolit

Reputation: 9720

Go, init custom type

Suppose, I am writing a minesweeper game, and i have a struct to hold the game field, that contains a 2D array with mines. Suppose, i want to initialize it with some mines. Is there a way to say gameField GameField = new(GameField, 30), similar to what i'd do in java?

Here is some code to illustrate my point:

type GameField struct {
  field [20][20] int
}

func (this *GameField) scatterMines(numberOfMines int) { //some logic to place the numberOfMines mines randomly }

What i want is to call an initializer and have that scatterMines func executed automatically.

Upvotes: 2

Views: 951

Answers (2)

hyperslug
hyperslug

Reputation: 3623

A pattern I've seen in Go structs is a corresponding NewXxx method (e.g., image pkg):

type GameField struct {
  field [20][20] int
}

func NewGameField(numberOfMines int) *GameField {
  g := new(GameField)
  //some logic to place the numberOfMines mines randomly
  //...
  return g
}

func main() {
    g := NewGameField(30)
    //...
}

Upvotes: 9

user811773
user811773

Reputation:

Go objects have no constructors, so there is no way to have scatterMines function executed automatically at variable initialization. You need to call the method explicitly:

var GameField g
g.scatterMines(30)

See also http://golang.org/ref/spec#The_zero_value.

Upvotes: 2

Related Questions