Code Fix

初級

undefined: の原因と直し方

宣言していない変数名や関数名を参照すると undefined エラーになります。変数名のタイプミスが典型的な原因です。

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

./main.go:7:14: undefined: pricee
./main.go
ファイル名
7
行番号
14
列番号
undefined: pricee
詳細メッセージ — 何が問題だったか

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

パターン1

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6  	price := 1000
 7  	fmt.Println(pricee)
                    ^
 8  }
./main.go:7:14: undefined: pricee

priceとpriceeは1文字違うだけでも別の名前として扱われ、コンパイラはpriceeを見つけられません。

直し方: pricee を price にします。

この問題を解いてみる →

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

パターン2

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6  	count := 5
 7  	fmt.Println(cuont)
                   ^
 8  }
./main.go:7:14: undefined: cuont

文字の順番が入れ替わったタイプミスも、Goコンパイラには全く別の名前に見えます。

直し方: cuont を count にします。

この問題を解いてみる →

パターン3

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6  	total := 250
 7  	fmt.Println(totall)
                    ^
 8  }
./main.go:7:14: undefined: totall

1文字多いだけでも一致しない名前として扱われ、宣言されたことのない値の参照になります。

直し方: totall を total にします。

この問題を解いてみる →

パターン4

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6  	score := 88
 7  	fmt.Println(scroe)
                   ^
 8  }
./main.go:7:14: undefined: scroe

コンパイラは似た名前を提案してくれますが、実行はしてくれません。正しい名前を書く必要があります。

直し方: scroe を score にします。

この問題を解いてみる →

パターン5

 1  package main
 2  
 3  import "fmt"
 4  
 5  func main() {
 6  	name := "go"
 7  	fmt.Println(nmae)
                   ^
 8  }
./main.go:7:14: undefined: nmae

隣り合う文字の入れ替えは見た目で気づきにくいタイプミスの代表例です。

直し方: nmae を name にします。

この問題を解いてみる →

よくある誤解

「似た名前の変数があれば、コンパイラが自動的に補完してくれるはず」という思い込みは誤りです。Goのコンパイラは厳密な名前の一致を要求し、似た名前を勝手に採用することはありません。

実務での勘所

GoのコンパイラはRustやTypeScriptほど手厚い「もしかして」の提案をしないことで知られています。これは怠慢ではなく、Goの「賢い機能より単純さと直接性を優先する」という一貫した設計哲学の表れです。近年のGoのバージョンでは多少親切な提案が増えてきていますが、他の言語ほど踏み込んだ提案は行いません。タイプミスを見つける主な手段は、エディタのGo言語サポート(gopls)による即座のハイライトに頼るのが実務的です。

演習をはじめる

関連するエラー

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