Skip to Content

入門Goプログラミング Lesson3(ループと分岐)から学んだこと

LESSON3 ループと分岐

真か偽か

文字内に特定の文字列を含むか

ポイント

strings.Contains
strings パッケージ

package main

import (
	"fmt"
	"strings"
)

func main() {
	fmt.Println("きみは薄暗い洞窟の中にいる。")
	var command = "wake outside"
	var exit = strings.Contains(command, "outside")
	fmt.Println("洞窟を出る", exit)
}

実行結果

きみは薄暗い洞窟の中にいる。
洞窟を出る true

比較

記号 意味
== 等しい
!= 等しない
< 未満
> 超過
<= 以下
>= 以上

ifによる分岐

if born == "abasiri" {

} else if born == "kitami" {

} else {

}

論理演算子

記号 意味
|| or
&& and

switchによる分岐

package main

import "fmt"

func main() {
	var born = "syari"

	switch born { //boanの下記のcaseを比較する
	case "abashiri":
		fmt.Println("そう")
	case "kitami", "tokoro": //,区切りはorの効果
		fmt.Println("そうかも")
	case "memanbetsu":
		fmt.Println("ありうる")
	default:
		fmt.Println("流石に違う")
	}
}

実行結果

流石に違う

ポイント

fallthrough
その次のcaseの本体を実行したいときに使う

package main

import "fmt"

func main() {
	var born = "tokoro"

	switch born { //boanの下記のcaseを比較する
	case "abashiri":
		fmt.Println("そう")
	case "kitami", "tokoro": //,区切りはorの効果
		fmt.Println("そうかも")
		fallthrough
	case "memanbetsu":
		fmt.Println("ありうる")
	default:
		fmt.Println("流石に違う")
	}
}

実行結果

そうかも
ありうる

fallthroughを増やすと連鎖してどんどん下の行が追加される
最終行のdefaultのところに追加すると、これ以上下がないのでコンパイルエラーになる

	switch born { //boanの下記のcaseを比較する
	case "abashiri":
		fmt.Println("そう")
		fallthrough
	case "kitami", "tokoro": //,区切りはorの効果
		fmt.Println("そうかも")
		fallthrough
	case "memanbetsu":
		fmt.Println("ありうる")
		fallthrough
	default:
		fmt.Println("流石に違う")
	}

実行結果

そう
そうかも
ありうる
流石に違う

fallthrought連鎖が途切れるとそこで止まる

	switch born { //boanの下記のcaseを比較する
	case "abashiri":
		fmt.Println("そう")
		fallthrough
	case "kitami", "tokoro": //,区切りはorの効果
		fmt.Println("そうかも")
		fallthrough
	case "memanbetsu":
		fmt.Println("ありうる")
	default:
		fmt.Println("流石に違う")

実行結果

そう
そうかも
ありうる

ループによる繰り返し

forループの他の形式はLESSON4と、9で紹介
ここでは基本の形だけ

for 終了条件 {

}

ポイント

break ループから抜けられる
ここの例では使うことなかったけど

package main

import (
	"fmt"
)

func main() {
	var count = 5
	for count > 0 { // 終了条件:1まではループ
		fmt.Println(count)
		count--
	}
	fmt.Println("終わり")
}

実行結果

5
4
3
2
1
終わり

練習問題

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	var (
		ans = 20
		num int
	)

	for {
		rand.Seed(time.Now().UnixNano())
		num = rand.Intn(30)
		fmt.Print(num, "は")
		if num == ans {
			print("正解")
			break
		} else if num > ans {
			fmt.Println("大きい")
		} else if num < ans {
			fmt.Println("小さい")
		} else {
			fmt.Println("予想外")
		}
	}
	fmt.Println("終了")
}

実行結果
なぜ終了よりも、先に正解がこないのか

14は小さい
21は大きい
5は小さい
28は大きい
15は小さい
17は小さい
11は小さい
6は小さい
2は小さい
7は小さい
12は小さい
14は小さい
6は小さい
20は終了
正解

参考

http://golang.jp/pkg/strings http://cuto.unirita.co.jp/gostudy/post/standard-library-string/