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, "円")
}
}
switch
条件分岐の書き方の1つです。
"default: "を最後に書くことですべてのcaseに当てはまらない場合の処理を設定できます。
func main() {
country := "Thiland"
switch country {
case "Japan":
fmt.Println("Japan!")
case "China":
fmt.Println("China!")
default: //どれでもない場合
fmt.Println("Others!")
}
}
また、変数名をはじめに指定せず、↓のように条件設定することも可能です。
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")
}
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))
}
log
現在時刻と共に出力を行ってくれます。
"log.Fatalln"をした場合にはその処理を終えた直後にプログラムが終了されます。
func main() {
log.Println("logging!")
log.Printf("%T %v", "test", "test")
fmt.Println("Hello")
log.Fatalln("error!") //プログラムが終了する。
fmt.Println("ok!") //上で終了しているので実行されない
}
logの利用例
例えば、ファイル読み込み時に目的のファイルが存在しない場合、"Fatalln"を使ってプログラムを強制終了させるのに使います。
func main() {
_, err := os.Open("./filename.go")
if err != nil {
log.Fatalln("Exit", err)
}
fmt.Println("Successfully loaded.")
}
他にもlogをコンソールに出力するだけでなくファイルとして出力する方法もあります。これは次回扱います。
"https://note.com/theta04/n/n99bfcf10fd5d"
以上です。それでは!