ネットワークを利用したプログラムを書くときには、CGO_ENABLED=0
でかなりコンパイルが遅くなることがわかります。なぜCGO_ENABLED = 0でコンパイルするのが遅いのですか?
例えば、最も単純なHTTPサーバ:
package main
import (
"flag"
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi! glad you requested %s.\n", r.URL.Path[1:])
}
func main() {
port := flag.Int("port", 9000, "")
flag.Parse()
http.HandleFunc("/", handler)
err := http.ListenAndServe(fmt.Sprintf(":%d", *port), nil)
if err != nil {
log.Fatal(err)
}
}
タイミングは以下のとおりです。
% time go build
go build 0.46s user 0.06s system 131% cpu 0.396 total
% time CGO_ENABLED=0 go build
CGO_ENABLED=0 go build 3.93s user 0.15s system 143% cpu 2.849 total
CGOハンドリングかは無関係と思われるので、これまでのところ、私は何を私は、Cへのバインディングを使用していませんよ100%の静的バイナリをコンパイルすることができますが、そのようなスローダウンがある場合はそうではありません。
このような現象の原因は何ですか?
Btwは1.10のキャッシュのように見えますが、多くを助けるつもりです... ( '' pkg/'を完全に取り除く将来計画もあります。 ) –