format_list_bulleted
【Golang】Golangでのif文を用いた簡易文つき条件分岐の実装について解説
最終更新日時:2020-05-16 02:37:10



プログラミング言語の基本的な制御構文の一つにif文がありますね、Golangでも、もちろんif文を用いることができます。今回はGolangでの基本的なif文の書き方と簡易文付きのif文の使い方について説明します。

基本的なif文の書き方

まずは基本的なGolangでのif文の書き方について紹介します。

if 条件式 {
  // 条件の値がtrueだった時に実行される処理
}

他のプログラミング言語とも大きな差はなく、ifの後に条件式を記述し、その後のブロック内に条件がtrueであったときの処理を記述します。

また、elseelse ifについても以下のように実装できます。

if 条件式a {
  // 条件式aがtrueだった場合の処理
} else if 条件式b {
  // 条件式aがfalseで条件式bがtrueだった場合の処理
} else {
  // 条件式a, 条件式bが共にfalseだった場合の処理
}

if文の書き方については他のプログラミング言語とあまり変わりません(当然丸括弧()や中括弧{}の有無についての違いはありますが)。

簡易文付きif文について

簡易文付きif文の書き方について

続いてGolangで特徴的な簡易文付きif文の書き方について紹介します。

if 簡易文; 条件式 {
  // 条件式がtrueだった場合の処理
}

ここでの簡易文とは変数の定義と代入などの構造を持たない文を意味します。例えば次のように用いることができます。

タイトル:main.go

if value := getNum(); value > 20 {
  log.Print("valueは20より大きいです")
}
func getNum() int {
  //何かしらのint型の数値を返す処理
}

この場合getNum()で返される値が20を超えるか否かについて条件分岐をすることができます。ここで用いたvalueという変数はif文のブロックでのスコープが適用されるのでグローバルスコープや他のブロックスコープで用いることはできません。

簡易文付きifを活用した例

簡易文付きifが活躍するのがエラーハンドリングが必要な処理を行う場合です。例えばエラーが起きる場合がある以下のような処理を想定します。

タイトル:main.go

str := "hoge"
num, err := strconv.Atoi(str)
if err != nil {
	log.Print(err.Error())
} else {
	log.Print(num)
}
str = "4"
num, err = strconv.Atoi(str)
if err != nil {
	log.Print(err.Error())
} else {
	log.Print(num)
}

strconv.Atoi()という引数のstring型の変数をint型に変換するメソッドを用いています。このメソッドは引数内の文字列をint型に変換できない際にerrorを返します。

タイトル:ターミナル

$ go run main.go

エラーの画像

上のようにコードを定義した際にerrがグローバル変数になっています。したがって、本来エラーハンドリングをした部分で出したエラーとは異なる部分で発生したエラーを拾ってしまう場合があります(今回はerr変数を適切に代入しているので不具合は起きません)。ですのでerrをグローバル変数にするのは要注意です。

ですので以下のように簡易文付きifを用いることでこの問題を解決できます。

タイトル:main.go

str := "hoge"
if num, err := strconv.Atoi(str); err != nil {
	log.Print(err.Error())
} else {
	log.Print(num)
}
str = "4"
if num, err := strconv.Atoi(str); err != nil {
	log.Print(err.Error())
} else {
	log.Print(num)
}

こうすることでerrがif文のブロックスコープに入るので安全です。

タイトル:ターミナル

$ go run main.go

エラーの画像

この記事のまとめ

本記事ではGolangでのif文の使い方と簡易文付きif文の使い方について説明しました。最後に記事の内容の要点についてまとめておきます。

  • Golangではif文を他の言語同様に記述できる
  • elseやelse ifも使用できる
  • 簡易文付きif文を用いることで処理をした変数を条件式に加えることができる
  • 簡易文付きif文はエラーハンドリングなどに便利である

皆さんもGolangで簡易文付きif文を使ってみましょう!