kdnakt blog

hello there.

Go言語についておたよりが来ました

昨日Go言語で困ってるって話を書いたら、budougumi先生からおたよりが来ました。ありがたや!

 

kdnakt.hatenablog.com

 

 

[error型の返り値を無視してしまう問題]

この関数でerr2を返すべきなのにー、って話を書いた。

func myFunction(param string) (string, error) {
    err1 := check1(param)
    if err1 != nil { return "", err1 } err2 := check2(param)
if err2 != nil { return "", err1 } return param }

 

budougumi先生からのおたよりはこちら。

 

errの宣言とnilチェックを1行で書けばエラー名もシンプルになるしスコープちゃんと考えろよ!と。確かに他のライブラリとかでこの書き方見た覚えがあるけど、あんまり理解してなかった。反省。

 

冗長だなーと思ったのはエラーが発生しているのにnilチェックをかけないといけない部分だったんだけど、JavaとかJavaScriptthrow Exceptionみたいな大域脱出は例外が正しくハンドリングされない可能性もある。そう考えると、error型をちゃんとハンドリングできるGo言語の方が堅牢な書き方が出来るのかも。

 

[適切なerrorをリターンしない問題]

とはいえ、Go言語で書いていてもerror型を無視してコーディングしてもコンパイルを通すことができてしまう。

 

func main() {
    isValid("myParam")// エラー型を受け取らなくても良い
}

func isValid(param string) error {
    if ... {
        return errors.New("invalid parameter")
    }
    return nil
}

 

budougumi先生からのおたよりはこちら。

 

便利そうなツール!(未導入)

来週中くらいには回せるようになりたい……ならないかな(多分このブログを読んでいるであろうCI担当メンバの方をみつめる :eyes:)。

 

あれ、でも普段VS Code拡張機能使って開発してるんだけど、errcheckデフォルトで有効になってそう……なんかうまく動かない条件とかあるのかな。はて。少し調べてみよう。

github.com

 

[まとめ]

budougumi先生いつもありがとうございます!!