goplsでnet/http系のパッケージを入れると動かなくなるバグ(Mac)

goplsで快適にプログラムを書いていたんですが、net/http系のライブラリを使うと何故か補完等の全機能が使えなくなるというバグに見舞われて、かなり苦労したのでもし他にもそういう方がいたときのために解決方法等を載せておきます。


どのようなバグか

僕はgolangでweb系のプログラムを書いていたので、gin-gonic/ginのようなライブラリを使っていたのですが、そのライブラリをimportするとgoplsが動かなくなるというバグでした。


原因

様々な場所でログを出力してデバッグしていたところ。

$GOPATH/src/golang.org/x/tools/go/packages/packages.goLoadという関数でエラーが起きていたようでした。

exit status 2: # runtime/cgo","_cgo_export.c:3:10: fatal error: 'stdlib.h' file not found

というエラー文が出てきました。

goplsはcgoを使っているらしくC系の動作がちゃんとしていないと動かないようです。

このエラーについてググるとMacOSのアップデート時にxcodeがstdlib.hを見失ってしまう?ことがあるらしいです。

もし、これと同じエラーかどうかを試したければ、stdlib.hをimportしたC++の簡単なプログラムを書いて、ちゃんと動くかを試してみるといいと思います。


解決方法

僕の場合は以下のようにして、pkgをインストールしたら治りました。

$ open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

参考: https://stackoverflow.com/questions/51761599/cannot-find-stdio-h