Reputation: 9720
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
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
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