38

我意识到 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)
4

3 回答 3

64

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}
于 2011-11-29T01:04:52.237 回答
6

Go 没有自动构造函数。通常,您创建自己的NewT() *T函数来执行必要的初始化。但它必须手动调用。

于 2011-11-29T00:58:38.360 回答
0

这是一个 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,
}

于 2019-07-12T16:19:58.250 回答