【Golang】if文の中で定義した変数が使えない

if文の中で定義した変数の使い方に注意

if文の中で、条件分岐に合わせて変数を定義したい時ってありますよね?

例えばこんな感じ↓

if (条件式) {
  // 変数定義
} else {
  // 変数定義
}

しかし、これをGolangでやろうとすると、以下のようにエラーが出てしまいます。

if test == "aaa" {
  sample := 1  // error: sample declared but not used
} else {
  sample := 0 // error: sample declared but not used
}

fmt.Println(sample)

なぜかというと、Golangではif文の中で定義した変数はそのif文の中でしか使えないからです。

そのため、上記のようにif文の中で変数sampleを定義してますが、if文の外にあるフォーマット関数でその変数を出力することはできません。

解決策

もし条件分岐によって変数の内容を変えたい場合は、if文の外で変数を定義(初期化)してあげればOKです。

var sample int // 変数定義

if test == "aaa" {
  sample = 1
} else {
  sample = 0
}

fmt.Println(sample)

上記のように、if文の中では予め定義してある変数に値を代入するだけです。

動的型付け言語出身の人にとっては、少し慣れないポイントかもしれないですね。

タイトルとURLをコピーしました