クラウド時代のWebアプリケーション・スマートフォンアプリを開発・運用する会社です。 03-4577-8680 03-6673-4950

Golangのreturnでの凡ミス

2016-06-15

こんな感じの関数を書いたとします。

func hoge() (sub int) {
  for _,row := range rows {
    if r.MatchString(row[0]) {
      return // <- 本当は continue と書きたかった
    }
// ....
}

continue と書くべきところをなぜかうっかり return と書いてしまいました。
で、本来ならループ内の各要素を1つ飛ばす、という挙動にしたかったところが、関数ごと飛んでいたわけです。

名前付き返り値が宣言されているので

return sub

と同じことに
なり、Golangのお約束として初期化されたintは0なので、

return 0

ということになるわけですね。

https://play.golang.org/p/zBT_cS2DvF

もしこれが名前付き返り値でなければ、想定通りエラーになっていたはずです。

https://play.golang.org/p/6vUj8oCSJt