2011-11-28 30 views
18

私は、Goにはクラスはありませんが、代わりに構造体の考え方が必要であることを認識しています。構造体のinit関数

構造体には、クラスの__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) 

答えて

39

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

Goは自動コンストラクタを持っていません。通常は、必要な初期化を実行する独自のNewT() *T関数を作成します。しかし、手動で呼び出さなければなりません。