問題:
Go のコンパイル時関数を使用すると、コンパイラは、変数がコード内で明らかに使用されています。
func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) { key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil) side := r.FormValue("side") comparison := new(Comparison) err := datastore.Get(c, key, comparison) check(err) var m Image if( side == "left"){ m, _, err := image.Decode(bytes.NewBuffer(comparison.Left)) } else { m, _, err := image.Decode(bytes.NewBuffer(comparison.Right)) } check(err) w.Header().Set("Content-type", "image/jpeg") jpeg.Encode(w, m, nil) }
コンパイラは警告を生成しますfor:
解決策:
として@kostixによって指摘されたように、変数mがifのスコープ内で定義されているためにエラーが発生します 声明。これを解決するには、m の宣言を関数のスコープに移動し、関数全体を通してアクセスできるようにします。
func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) { key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil) side := r.FormValue("side") comparison := new(Comparison) err := datastore.Get(c, key, comparison) check(err) // Declare m in the function's scope var m Image if( side == "left"){ m, _, err := image.Decode(bytes.NewBuffer(comparison.Left)) } else { m, _, err := image.Decode(bytes.NewBuffer(comparison.Right)) } check(err) w.Header().Set("Content-type", "image/jpeg") jpeg.Encode(w, m, nil) }
今度は、変数 m が 1 回宣言され、両方の if 分岐内で使用され、コンパイラの動作が修正されます。認識された不一致。さらに、err と key は関数内でも使用されているため、コンパイラの警告も表示されなくなります。
以上がGo コンパイラで、使用している変数に対して「宣言されていますが使用されていません」というエラーが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。