range・switch・differ・log【夏休みにGo vol.15】

こんにちは、しーたです。
今日はrange, switch, differ, logについて学んでいきます。

range

配列の要素についてfor文の繰り返しをすることができます。
下の例では"list"の各要素についてfor文の中身を実行しています。

func main() {
	list := map[string]int{"apple": 100, "orange": 150, "peach": 300}
	for name, price := range list {
		fmt.Println(name, price, "円")
	}
}

画像1


switch

条件分岐の書き方の1つです。
"default: "を最後に書くことですべてのcaseに当てはまらない場合の処理を設定できます。

func main() {
	country := "Thiland"
	switch country {
	case "Japan":
		fmt.Println("Japan!")
	case "China":
		fmt.Println("China!")
	default: //どれでもない場合
		fmt.Println("Others!")
	}
}

画像2


また、変数名をはじめに指定せず、↓のように条件設定することも可能です。

func main() {
	country := "Thiland"
	switch {
	case country == "Japan":
		fmt.Println("Japan!")
	case country == "China":
		fmt.Println("China!")
	default: //どれでもない場合
		fmt.Println("Others!")
	}
}


defer (遅延実行)

deferを使った部分の処理は最後に実行されます。
複数deferが存在する場合は下から順に実行されます。
(スタッキングデファーといいます。)

func main() {
	fmt.Println("start")
	defer fmt.Println(1)
	defer fmt.Println(2)
	defer fmt.Println(3)
	fmt.Println("End")
}

画像6


deferの利用例

ファイル操作で、"file.Close()"をするのによく使われます。
「操作終了後に必ず閉じること」を忘れないようにするためです。

func main() {
	fmt.Println("start")
	fmt.Println("End")

	file, _ := os.Open("./main.go")
	defer file.Close()
	data := make([]byte, 100)
	file.Read(data)
	fmt.Println(string(data))
}

画像3


log

現在時刻と共に出力を行ってくれます。
"log.Fatalln"をした場合にはその処理を終えた直後にプログラムが終了されます。

func main() {
	log.Println("logging!")
	log.Printf("%T %v", "test", "test")
	fmt.Println("Hello")

	log.Fatalln("error!") //プログラムが終了する。
	fmt.Println("ok!")    //上で終了しているので実行されない
}

画像4


logの利用例

例えば、ファイル読み込み時に目的のファイルが存在しない場合、"Fatalln"を使ってプログラムを強制終了させるのに使います。

func main() {
	_, err := os.Open("./filename.go")
	if err != nil {
		log.Fatalln("Exit", err)
	}
	fmt.Println("Successfully loaded.")
}

画像5

他にもlogをコンソールに出力するだけでなくファイルとして出力する方法もあります。これは次回扱います。
"https://note.com/theta04/n/n99bfcf10fd5d"


以上です。それでは!







この記事が気に入ったらサポートをしてみませんか?