April 2022
Beginner to intermediate
464 pages
6h 44m
Japanese
Javaなどの例外機構を持つ言語で例外が発生し得る場合、例外をチェックしないとコンパイルができません。しかしGoではエラーのハンドリングを忘れてしまった場合もコンパイルエラーは発生せず、正常にビルドできてしまいます。エラーのチェックを忘れてしまったことにより、エラーが発生した場所ではなく、意図しない場所でエラーや panic が発生し、調査が困難になってしまうことがあります。Goではエラーハンドリングがコンパイラーで強制されない代わりに、Linterなどを使ってエラーハンドリングが不十分な実装を検知できます。多くの場合、エラーのチェック忘れは実装者の意図していない場合がほとんどです。
エラーのチェック忘れをLinterで検知する場合、サードパーティーの kisielk/errcheck というLinterがよく使われています。
以下のコードでは関数 a() からのエラーのチェックを忘れてしまっています。errcheck を使うことで、このようなエラーのチェック忘れを検知できます。
func main() {
// エラーハンドリングを忘れている
a()
}
func a() error {
return errors.New("some error")
}
$ errcheck ./...
main.go:8:3: a()
似たようなパターンとして、エラーを返す関数が複数あり得るときにif err != nil {} としてエラーはチェックしているけど、間違ったエラーをチェックしていることがあります。このような場合も errcheck で検知できます。以下は関数 ...
Read now
Unlock full access