Code Fix

初級

declared and not used: の原因と直し方

Goでは変数を宣言しても一度も使わないとコンパイルエラーになります。デバッグ用に一時的に変数を減らした際など、使い忘れの変数が残っていると発生します。

エラーメッセージの読み方

./main.go:6:5: declared and not used: count
./main.go
ファイル名
6
行番号
5
列番号
declared and not used: count
詳細メッセージ — 何が問題だったか

このエラーが出る典型パターン

パターン1

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6      count := 5
 7                        
                 ^
 8      fmt.Println("done")
 9  }
./main.go:6:5: declared and not used: count

countを宣言しても一度も使っていません。使わない変数は_に代入するか、削除する必要があります。

直し方: (空)_ = count にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6      total := 100
 7                        
                 ^
 8      fmt.Println("done")
 9  }
./main.go:6:5: declared and not used: total

未使用の変数はGoコンパイラがエラーとして検出します。_に代入すれば意図的に捨てたことを表現できます。

直し方: (空)_ = total にします。

この問題を解いてみる →

パターン3

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6      name := "go"
 7      score := 10
 8                        
                 ^
 9      fmt.Println(name)
10  }
./main.go:7:5: declared and not used: score

nameは使われていますがscoreは使われていません。使う変数と使わない変数が混在していても、未使用のものはエラーになります。

直し方: (空)_ = score にします。

この問題を解いてみる →

パターン4

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6      x := 1
 7      y := 2
 8                    
               ^
 9      fmt.Println(y)
10  }
./main.go:6:5: declared and not used: x

xは宣言だけで使われていません。fmt.Println(x)のように使うか、_に代入する必要があります。

直し方: (空)_ = x にします。

この問題を解いてみる →

パターン5

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6      value := 42
 7                        
                 ^
 8      fmt.Println("result")
 9  }
./main.go:6:5: declared and not used: value

valueを宣言した後、一度もその変数を参照していないためコンパイルエラーになります。

直し方: (空)_ = value にします。

この問題を解いてみる →

よくある誤解

「使わない変数は警告止まりで、コンパイルは通るはず」という思い込みは誤りです。Goはコンパイラの標準機能として未使用変数を検出し、警告ではなくエラーとして扱います。

まとめ

declared and not used:は初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)