Go言語_制御構文
条件分岐:if
if文の書き方
Go言語のif文では、以下のような記述ルールがあります。
- 条件部に丸括弧を付けられません。
- 本件部の波括弧は省略することができません。
- 次条件式は「else if」とスペースが必要です。
package main
import "fmt"
func main() {
x, y := 20, 30
if x > y {
fmt.Println("x is larger than y")
} else if x < y {
fmt.Println("x is smaller than y")
} else {
fmt.Println("x equals y")
}
}
条件部で一時的な変数を定義する
初期化ステートメントを記述できるため、条件部で一時的に利用する変数を作成できます。
package main
import (
"errors"
"fmt"
"os"
)
func retError(flag bool) error {
if flag {
return errors.New("Error is occured.")
}
return nil
}
func main() {
if err := retError(true); err != nil {
fmt.Println(err)
os.Exit(1)
}
os.Exit(0)
}
複数条件の定義
複雑な条件式を記述する際には、丸括弧を使用することができます。
とはいえ、Go言語では条件部自体の丸括弧のみが許されていない仕様となっています。
package main
import "fmt"
func main() {
x := 15
y := -1
if ((x > 0) && (x < 10)) || (y < 0) {
fmt.Println("match")
}
}
条件分岐:switch
switch文の書き方
switch文では、case に単一の値だけでなく、カンマで区切った値も指定できます。
defaultを定義すると、いずれのcaseにも一致しなかった場合に処理が実行されます。(defaultを省略することもできます。)
package main
import "fmt"
func main() {
n := 9
switch n {
case 2, 3, 5, 7:
fmt.Println("Prime number")
case 4, 6, 8:
fmt.Println("Odd number")
case 1, 9:
fmt.Println("Even number")
case 0:
fmt.Println("zero")
default:
fmt.Println(n)
}
}
fallthrough
Go言語のswitch文は、caseが1つ実行されると次のcaseに実行が移ることなく switch 文が終了します。
したがって、C言語などのようにbreak文を記述する必要はありません。
しかし、意図的にcaseの処理が終わったあとに、次のcaseに処理を進めたい場合もあります。
その場合は、case内に「fallthrough」を書くことで、次のcaseに処理を進めることができます。
package main
import "fmt"
func main() {
n := 1
switch n {
case 1:
n++
fallthrough
case 2:
n = n + 2
fallthrough
case 4:
n = n * 4
fallthrough
default:
fmt.Println(n) //16
}
}
条件式での分岐
Go言語のswitch文では、caseに式を指定することができます。
ただし、caseの型は統一する必要があります。式の成否がbool型で判定される場合に、数値caseと組み合わせることはできません。
package main
import "fmt"
func isPositiveNumber(num int) bool {
if num < 0 {
return false
}
return true
}
func main() {
n := 15
switch {
case isPositiveNumber(n):
fmt.Println("n is negative number")
fallthrough
case n%3 == 0:
fmt.Println("n is odd number")
case n%2 == 0:
fmt.Println("n is even number")
}
}
反復処理:for
基本形
Go言語のfor文では、if文と同じく、条件部の丸括弧を記述しません。
基本形は他言語と同じく、「for 初期化; 条件; 制御 {}」となります。
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ {
fmt.Println(i)
}
}
反復処理はfor文のみ
Go言語で繰り返しを表現する方法はfor文のみです。
ほかの言語におけるwhile文やdo/while文、loop文といったような表現は、すべてfor文を用いて行います。
while文の実現
Go言語のfor文では、for文の初期化や制御を省略できます。
for文に条件のみ記述すれば、while文を実現できます。
さらに、全て省略して「for {}」とすれば無限ループ処理を実現できます。
package main
import "fmt"
func main() {
n := 0
for n < 10 {
fmt.Printf("n = %d\n", n)
n++
}
}
break/continue
繰り返し制御において、ループを終了する「break」と、ループの最初から処理を再開する「continue」が用意されています。
無限ループの書き方と組み合わせて、素数一覧を出力する例を挙げてみます。
package main
import "fmt"
// !
// @brief 素数判定
// @param[in] num 数値
// @retrun 素数ならばtrueを返し、素数でなければfalseを返す。
//
func checkPrimeNumber(num int) bool {
for i := 2; i < num; i++ {
if num%i == 0 {
return false
}
}
return true
}
func main() {
n := 1
for { // Go言語での無限ループ定義
n++
if n > 500 {
break
}
if !checkPrimeNumber(n) {
continue
}
fmt.Printf("%d ", n)
}
fmt.Printf("\n")
}
foreachの実現
rangeキーワードを用いることでイテレータ処理が行えます。
package main
import "fmt"
func main() {
var array []int = []int{1, 2, 3, 4, 5}
for _, num := range array {
fmt.Printf("%d\n", num)
}
}
関連ページ
- Go言語_プログラムの作成
- Go言語_コマンドライン引数
- Go言語_変数と型
- Go言語_コンポジット型
- Go言語_制御構文
- Go言語_関数
- Go言語_演算子
- Go言語_メソッド
- Go言語_インターフェース