Q. go mod tidyしたらruntime error: invalid memory address or nil pointer dereference
go mod tidyを実行したらruntime error: invalid memory address or nil pointer dereferenceエラーが発生した問題について解決策をまとめた。
状況
あるプロジェクトでgo mod tidy
を実行したら、以下のようなエラーが発生した。
go: added github.com/pkg/errors v0.9.1
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x5983af]
goroutine 97 [running]:
go/types.(*Checker).handleBailout(0xc0004ce600, 0xc00127fbd0)
/usr/local/go/src/go/types/check.go:367 +0x88
...
/home/circleci/go/pkg/mod/golang.org/x/tools@v0.6.0/go/packages/packages.go:845 +0x94
exit status 2
調査
エラーを見ると、golang.org/x/tools
に原因があると推測できる。
実際に調べると、関連していそうなIssueがいくつか見つかった。
- https://github.com/golang/go/issues/62167
- https://github.com/golang/go/issues/64812
- https://github.com/golang/go/issues/61035
これらの問題は既に修正されているが、そもそもよく見るとインストールされているgolang.org/x/tools
のバージョンが古いv0.6.0
と分かる。
原因
go mod tidy
によって、そのプロジェクトで直接利用されていないgolang.org/x/tools
が削除され、また利用している内製ライブラリの1つが保守されておらず古いgolang.org/x/tools
のv0.6.0
を利用していたことで、このエラーが発生するようになった。
ちゃんと保守しよう。