2017-04-27 4 views
0

私はGolangに取り組んでおり、func init()の仕組みについてちょっと混乱しています。私はmainpkg2 メインと呼ばれる2つのパッケージを持っていると言いましょう。私はpkg2の中にある変数を呼び出そうとしていますが、それはnilを与えます。基本的に、これは構造体である:初期値の中に割り当てられた値は値を維持しません

メインパッケージ:

import (
    ... 
    "github.com/myproject/config/pkg2" 
) 

func main() { 
    if pkg2.Myvariable == nil { 
     //it's nil. And it's entering in this conditional don't know why 
    } 
} 

PKG2パッケージ:

package pkg2 

import (
    ...some imports... 
) 

var MyVariable 

func init() { 
    MyVariable := "something" 
    //Here I assign a value to MyVariable 
    //I set an if here to check if it's executed 
    //and MyVariable get a value correctly 
} 

私も、私もpkg2.Myvariableを呼び出す前にinit functionが実行されたことに気づきました。ですから、簡単に言うと、メインパッケージの中にはnilが与えられていますが、initの中では値が正しく割り当てられています。なぜそれがnilに戻るのですか? 何が足りないですか?ありがとうございました!

答えて

5

:==に変更する必要があると思います。これは、新しいvarを導入するためです。

+0

である。パッケージレベルではなく、init関数のスコープを持つローカルコピーを作成しているようです。 – Gavin

+0

あなたは正しいです!ありがとうございました –

関連する問題