言語バージョン 1.15.6

公開日 2021年2月17日 JST

if

このページでは豊富な例を用いてGolangのif文の使い方を学ぶことができます。

if文は条件分岐を実現するGolangの制御構文の1つです。
ifキーワードの後ろに条件式やbool値を指定し、これらがtrueと評価される場合に{}(波括弧)で囲まれた処理が実行されます。 falseと評価された場合はif文の波括弧部分の処理は行われず、次の処理が実行されます。

Go言語の場合、条件式がtrueと評価された場合に実行される処理を囲む{}(波括弧)を省略することはできません。

// 記述例

if 条件式 {
  // 条件式がtrueの場合の処理
}



if 条件式 {
  // 条件式がtrueの場合の処理
} else {
  // 条件式がfalseの場合の処理
}



if 条件式1 {
  // 条件式1がtrueの場合の処理
} else if 条件式2 {
  // 条件式2がtrueの場合の処理
} else {
  // どの条件式もfalseの場合の処理
}



if 簡易文; 条件式 {
  // 条件式がtrueの場合の処理(簡易文で宣言した変数などを使用可能)
}

TL;DR

基本

// if文に指定した条件式がtrueを返せば{}(波括弧)内の処理が実行される
int1 := 1
if int1 < 10 {
  fmt.Println("Hi!")
}
==> Hi!





// 条件式がfalseの場合(()丸括弧の付与は任意)
int2 := 100
if (int2 < 10) {
  fmt.Println("Hi!")
}
==> 出力なし





// 文字列の条件式
string3 := "Go"
if string3 == "Go" {
  fmt.Println("Gopher!")
}
==> Gopher!





// 複数条件の組み合わせ.1
string4 := "FooBarNinja"
float4 := 3.14
if strings.Contains(string4, "Ninja") && float4 > 2 {
  fmt.Println("Golang!")
}
==> Golang!





// 複数条件の組み合わせ.2
if (false || 1 < 2) && (3.14 == 3.14 && "go" == "go") {
  fmt.Println("OK!")
}
==> OK!

elseの使用

// elseキーワードを指定して条件式がfalseの場合の処理を記述できる
bool1 := false
if bool1 {
  fmt.Println("TRUE")
} else {
  fmt.Println("FALSE")
}
==> FALSE





// trueの場合はelseの処理は実行されない
if 1 < 10 {
  fmt.Println("TRUE")
} else {
  fmt.Println("FALSE")
}
==> TRUE

else ifの使用

// else ifで新たな条件を追加できる
int1 := 5
if int1 < 5 {
  fmt.Println("IF")
} else if int1 == 5 {
  fmt.Println("ELSE IF")
} else {
  fmt.Println("ELSE")
}
==> ELSE IF






// else ifを複数記述する
string2 := "Go"
if len(string2) < 0 {
  fmt.Println("IF")
} else if len(string2) == 0 {
  fmt.Println("ELSE IF 1")
} else if 0 < len(string2) && len(string2) < 5 {
  fmt.Println("ELSE IF 2")
} else {
  fmt.Println("ELSE")
}
==> ELSE IF 2

if文内で使用する変数宣言

// 条件式の前に簡易文(simple statement、short statement)を指定できる
int1 := 0
if int1 := 100; int1 < 1000 {
  fmt.Println(int1)
}
==> 100
// ifの簡易文で定義した変数はifのスコープでのみ使用可能
fmt.Println(int1)
==> 0






// Goプログラミングで頻出するパターン

func func1(intArg int) error {
  if intArg > 10 {
    fmt.Println("OK!")
    return nil
  }
  return errors.New("fooBar Error")
}

// エラーが発生する場合
if err := func1(10); err != nil {
  fmt.Println("Error occurred")
}
==> Error occurred

// エラーが発生しない場合
if err := func1(100); err != nil {
  fmt.Println("Error occurred")
}
==> func1 IF BLOCK

解説

// 記述例

if 条件式 {
  // 条件式がtrueの場合の処理
}



if 条件式 {
  // 条件式がtrueの場合の処理
} else {
  // 条件式がfalseの場合の処理
}



if 条件式1 {
  // 条件式1がtrueの場合の処理
} else if 条件式2 {
  // 条件式2がtrueの場合の処理
} else {
  // どの条件式もfalseの場合の処理
}



if 簡易文; 条件式 {
  // 条件式がtrueの場合の処理(簡易文で宣言した変数などを使用可能)
}

基本

if文は条件分岐を実現する構文です。
ifキーワードの後に条件式(またはbool値)を指定し、条件式からtrueが返される場合に{}(波括弧)内の処理が実行されます。 条件式がfalseの場合には波括弧内の処理は実行されません。

条件式を()(丸括弧)で囲むのは任意ですが、可能な場合は丸括弧を省略することが推奨されます。

JavaScriptなどの他の言語では特定の場合にif文の{}波括弧を省略することができますが、Go言語の場合は省略することができないことに注意してください。

// 条件式がtrue
bool1 := false
if bool1 || true {
  fmt.Println("Go")
}
==> Go





// 条件式がfalse(()丸括弧の付与は任意)
if (100 < 1) {
  fmt.Println("OK")
}
==> 出力なし





// 複数条件の組み合わせ.1
string3 := "golang"
int3 := 100
if string3 == "golang" && int3 < 1000 {
  fmt.Println("Hello World")
}
==> Hello World





// 複数条件の組み合わせ.2
if (1 < 0 || false) || (1.4 == 1.4 && "go" != "c") {
  fmt.Println("FooBarNinja")
}
==> FooBarNinja

elseの使用

elseキーワードを用いることで、条件式がtrueでない場合に実行する処理を記述することができます。

// 条件式がtrue
int1 := 0
if int1 < 10 {
  fmt.Println("TRUE")
} else {
  fmt.Println("FALSE")
}
==> TRUE





// 条件式がfalse
var string1 = "Go"
if string1 == "Golang" {
  fmt.Println("TRUE")
} else {
  fmt.Println("FALSE")
}
==> FALSE

else ifの使用

else ifを使用することで、条件式を追加することができます。

if文全体で記述した条件式の条件が重なる場合、より先に記述した条件式を満たすブロックの処理のみが実行されます。
それ以降の条件を満たすブロックの処理は実行されないことに注意してください。

int1 := 100
if int1 < 100 {
  fmt.Println("IF")
} else if int1 == 100 {
  fmt.Println("ELSE IF")
} else {
  fmt.Println("ELSE")
}
==> ELSE IF






// 複数の else if
string1 := "FooBarNinja"
if string1 == "Foo" {
  fmt.Println("IF")
} else if string1 == "FooBar" {
  fmt.Println("ELSE IF 1")
} else if string1 == "FooBarNinja" {
  fmt.Println("ELSE IF 2")
} else {
  fmt.Println("ELSE")
}
==> ELSE IF 2

if文内で使用する変数宣言

条件式を記述する前に簡易文を記述することで、if文内で使用できる変数などを宣言することができます。
簡易文を記述する場合は条件式との間を;(セミコロン)で区切ります。

Go言語で頻出するパターンとして、関数を実行した場合のエラー判定などがあります。

この簡易文という言葉は英語原文でsimple statement、short statement、initialization statementなどと呼ばれます。

string1 := "Go"
if string1 := "GoGoGo"; string1 == "GoGoGo" {
  fmt.Println(string1)
}
==> GoGoGo
// if外のスコープのstring1
fmt.Println(string1)
==> Go






// Goプログラミングで多用するパターン

func func1(intArg int) error {
  if intArg > 10 {
    fmt.Println("OK!")
    return nil
  }
  return errors.New("fooBar Error")
}

// // エラーが発生する場合
if err := func1(10); err != nil {
  fmt.Println("Error occurred")
}
==> Error occurred

// エラーが発生しない場合
if err := func1(100); err != nil {
  fmt.Println("Error occurred")
}
==> func1 IF BLOCK

1次情報

If - Control structures - Effective Go - The Go Programming Language

If statements - The Go Programming Language Specification - The Go Programming Language

If - A Tour of Go