Функция init для структур
Я понимаю, что Go не имеет классов, но вместо этого создает идею структур.
У структур есть какая-либо функция инициализации, которая может быть вызвана аналогично функции __construct() класса?
Пример:
type Console struct {
X int
Y int
}
func (c *Console) init() {
c.X = "5"
}
// Here I want my init function to run
var console Console
// or here if I used
var console Console = new(Console)
Ответы
Ответ 1
Go не имеет неявных конструкторов. Вы, вероятно, напишете что-то вроде этого.
package main
import "fmt"
type Console struct {
X int
Y int
}
func NewConsole() *Console {
return &Console{X: 5}
}
var console Console = *NewConsole()
func main() {
fmt.Println(console)
}
Вывод:
{5 0}
Ответ 2
Go не имеет автоматических конструкторов. Обычно вы создаете свою собственную функцию NewT() *T
, которая выполняет необходимую инициализацию. Но его нужно вызывать вручную.
Ответ 3
Это завершение инициализации структуры Go:
type Console struct {
X int
Y int
}
// Regular use case, create a function for easy create.
func NewConsole(x, y int) *Console {
return &Console{X: x, Y: y}
}
// "Manually" create the object (Pointer version is same as non '&' version)
consoleP := &Console{X: 1, Y: 2}
console := Console{X: 1, Y: 2}
// Inline init
consoleInline := struct {
X int
Y int
}{
X: 1,
Y: 2,
}