golangの名前解決について

okzk.hatenablog.com

こちらのgolangのstatic link化に関する2年前の記事なのですが、先月こんなコメントをいただきました。

golangで書いたアプリケーションのstatic link化 - okzkメモ

そのtagを指定するとどう動く、ってのがイマイチわかりにくい。netパッケージだとnetgoまたはnetcgoを指定することで名前解決の方法が変わったりするし。

2018/03/27 18:36
b.hatena.ne.jp

そんなわけでビルド時にtagでnetgo指定したら、何が起こるかというハナシです。

あまり知られてないと思いますが、golangDNSの名前解決の方法が以下の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

cgonetgo のビルドタグをみると、どのソースがビルドされたりされなかったりがわかるのでオモシロイと思います。

私が把握しているnetgo指定をした場合の挙動の違いは以上なのですが、他にもあったら教えていただけるとウレシイです。
こちらからは以上です。