golangの名前解決について
こちらのgolangのstatic link化に関する2年前の記事なのですが、先月こんなコメントをいただきました。
golangで書いたアプリケーションのstatic link化 - okzkメモb.hatena.ne.jpそのtagを指定するとどう動く、ってのがイマイチわかりにくい。netパッケージだとnetgoまたはnetcgoを指定することで名前解決の方法が変わったりするし。
2018/03/27 18:36
そんなわけでビルド時にtagでnetgo指定したら、何が起こるかというハナシです。
あまり知られてないと思いますが、golangのDNSの名前解決の方法が以下の2種類があります。
- libcの
getaddrinfo
を使う - pure goの実装
前者のlibcの getaddrinfo
を使う場合はdynamic linkになってしまいますが、
CGO_ENABLED=0
を指定した場合や、netgoを指定したらpure go版の実装に切り替わります。
詳細はソースを検索してみてください。
https://github.com/golang/go/search?l=Go&q=netgo&type=Code
cgo
や netgo
のビルドタグをみると、どのソースがビルドされたりされなかったりがわかるのでオモシロイと思います。
私が把握しているnetgo指定をした場合の挙動の違いは以上なのですが、他にもあったら教えていただけるとウレシイです。
こちらからは以上です。