ちゃんと理解していなかったのでハマったという類いのものです。
こんな感じの関数を書いたとします。
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
ということになるわけですね。
もしこれが名前付き返り値でなければ、想定通りエラーになっていたはずです。
「A Tour of Go」でも結構最初の方に書かれている基本的なところのはずですが、すぐ気付かないとは精進が足りませんね…。 https://tour.golang.org/basics/7