初級のGoエラー 70問
14種類のエラーを、それぞれ複数パターンずつ収録しています。
- declared and not used: の原因と直し方Goでは変数を宣言しても一度も使わないとコンパイルエラーになります。デバッグ用に一時的に変数を減らした際など、使い忘れの変数が残っていると発生します。
- imported and not used の原因と直し方importしたパッケージを一度も使わないとコンパイルエラーになります。関数を削除したときにimport文だけ消し忘れると典型的に発生します。
- undefined: の原因と直し方宣言していない変数名や関数名を参照すると undefined エラーになります。変数名のタイプミスが典型的な原因です。
- missing return at end of function の原因と直し方戻り値のある関数は、すべての実行経路の末尾でreturn文が必要です。if文の片方の分岐にしかreturnが無いと、関数全体の末尾に到達しうると判断されエラーになります。
- cannot use ... as ... value(型の不一致)の原因と直し方変数の型と代入しようとする値の型が食い違うと、コンパイル時にcannot useエラーになります。Goは暗黙の型変換を行わないため、型はすべて一致している必要があります。
- non-boolean condition in if statement の原因と直し方C言語やJavaScriptと違い、Goのif文の条件式には真偽値(bool)しか書けません。0や1のような整数をそのまま条件に置くとコンパイルエラーになります。
- no new variables on left side of := の原因と直し方短縮変数宣言 := は左辺に少なくとも1つ新しい変数が必要です。すでに宣言済みの変数だけを左辺に並べて := を使うとコンパイルエラーになります。
- index out of range パニックの原因と直し方存在しない添字でスライスや配列にアクセスすると、コンパイルは通りますが実行時にパニックしてプログラムが異常終了します。
- invalid memory address or nil pointer dereference の原因と直し方値が代入されていないnilのポインタや構造体のフィールドにアクセスすると、実行時にパニックが発生します。newやリテラルで初期化する前のポインタが典型的な原因です。
- integer divide by zero パニックの原因と直し方整数を0で割ると、実行時にパニックが発生しプログラムが異常終了します。0になりうる値は、割り算の前に事前チェックが必要です。
- assignment to entry in nil map の原因と直し方makeで初期化していないnilのマップに要素を書き込もうとすると、実行時にパニックが発生します。マップのゼロ値はnilで、読み取りはできても書き込みはできません。
- slice bounds out of range の原因と直し方スライスをs[a:b]の形で切り出す際、範囲の終端が容量を超えているとパニックします。境界の指定はスライスの長さや容量を超えないことが前提です。
- assignment mismatch: 1 variable but ... returns 2 values の原因と直し方複数の戻り値を持つ関数の結果を、1つの変数だけで受け取ろうとするとコンパイルエラーになります。errorを返す関数を呼ぶときに特に起きやすいミスです。
- invalid operation: mismatched types string and int の原因と直し方文字列と数値を+演算子でそのまま連結しようとすると、型が一致していないためコンパイルエラーになります。数値を文字列に変換してから連結する必要があります。