функция init для структур - PullRequest
27 голосов
/ 29 ноября 2011

Я понимаю, что в 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)

Ответы [ 3 ]

52 голосов
/ 29 ноября 2011

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}
5 голосов
/ 29 ноября 2011

Go не имеет автоматических конструкторов.Обычно вы создаете собственную функцию NewT() *T, которая выполняет необходимую инициализацию.Но он должен быть вызван вручную.

0 голосов
/ 12 июля 2019

Завершена инициализация структуры 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,
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...