PUROGU LADESU

ポエムがメインのブログです。

【Golang】 4 制御構文、エラー処理

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をあえて書くのではなく、エラーハンドリングをするべき