if
if / else if / else
()はなくて良い
if result == "ok" { }
;で一文でかける
if result := by2(4); result == "ok" {
for
continue
break
for sum < 10 { } 初期化とインクリメントを省略できる ;も省略できる
for {} だけだと無限ループできる
for i := 0; i < 10; i++ { for sum < 10 {
range
リストやマップをかんたんに表示できる
for i, v := range list {
インデックスを使わない場合は _ で置き換える
マップのバリューのみ使わない場合は書かない
マップのキーのみ使わない場合は _ で置き換える
switch
switchの判定のみ使うのなら、;の前で取得して一文でかける
switchは条件を書かなくても使える
switch os := getOsName(); os { case "mac": case "win": default: }
変数を置かなくても使える
switch {
}
defer
前につけることで関数が終わったあとに実行する指示
func defaTest() { defer fmt.Println("defer") // 関数が終わったら実行されます fmt.Println("end") }
deferはスタッキングされるので、複数あると最後から表示される
close処理忘れ防止など
log
log.Println()
log.Fatalln() Fatalはそこでプログラムが終了する
エラー処理
goは戻り値のerrを使って処理する(トライキャッチじゃなく)
:=はどれか一つを初期化してたらエラーにならない
count, err := file.Read(data)
panic、recover
deferでrecover()してpanic()が起きても正常終了させる
recoverはpanicの前に書く
基本panicをあえて書くのではなく、エラーハンドリングをするべき