3

Go の学習を支援するテスト プログラムを作成しています。そうしているうちに、コンパイラがエラーを検出したはずだと思ったいくつかのインスタンスに遭遇しました。別の同様の状況に遭遇したので、この状況がエラーとして扱われない理由を尋ねるべきだと思いました。

例の状況:

if oError = rwfile.WriteLines(asParams, sParamsFilename); oError != nil {
    fmt.Printf("Error on write to file Params. Error = %s\n", oError)
} else {
    println("Params file write OK")
}

上記の例では、変数「oError」が宣言されているかどうかに関係なく、コンパイラはエラーを示しません。また、変数が宣言されていないときに行に次が含まれている場合にも機能します (予想どおり)。

if oError := rwfile.WriteLines(asParams, sParamsFilename); oError != nil {

変数 "oError" を宣言すると、":=" は機能しません (予想どおり)。

「rwfile」は私が書いたパッケージで、問題の関数は次のように始まります。

func WriteLines(asBuff []string, sFilename string) error { // write text file

ファイルの書き込みでエラーを作成し、変数「oError」を宣言せずに「=」を使用すると、プログラムは正しく動作し、nil 以外の「oError」変数を検出します。

では、oError が変数として宣言されていない場合、上記の "=" の使用がエラーとして扱われないのはなぜですか?

Go のバージョンは go1.1.2 Windows/386 です。

4

2 に答える 2