Rumah >pembangunan bahagian belakang >Golang >Mengapakah Mendayakan CGO_ENABLED Memperlahankan Kompilasi, Walaupun Tanpa Pengikatan C?
Mengapa CGO_ENABLED Boleh Melambatkan Kompilasi, Walaupun Tanpa C Bindings
Apabila mencipta program yang melibatkan penggunaan rangkaian, mendayakan CGO_ENABLED untuk kompilasi boleh mengakibatkan kelembapan yang ketara. Ini berlaku walaupun program tidak berinteraksi dengan kod C. Pertimbangkan pelayan HTTP mudah berikut:
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) } }
Perbandingan masa kompilasi mendedahkan perbezaan yang ketara:
% 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
Alasannya ialah pakej dalam perpustakaan standard disusun tanpa bendera . Apabila CGO_ENABLED ditetapkan, ia menukar bendera kompilasi, yang bermaksud bahawa pakej pra-bina ini tidak boleh digunakan lagi. Oleh itu, sebahagian besar perpustakaan standard mesti dikompilasi semula.
Semasa memasang pakej melalui go build -saya boleh mengurangkan isu ini, ia datang dengan kelemahannya sendiri. Memasang pakej yang dibina dengan CGO_ENABLED=0 akan meningkatkan kelajuan binaan masa hadapan, tetapi ia juga akan memperlahankan binaan yang tidak menggunakannya.
Untuk menyelesaikan konflik ini, pertimbangkan untuk menggunakan bendera -installsuffix dan/atau -pkgdir, yang mencipta direktori berasingan untuk mod kompilasi berbeza, mengoptimumkan kecekapan binaan dan menghapuskan kelewatan yang dikaitkan dengan menyusun dengan CGO_ENABLED.
Atas ialah kandungan terperinci Mengapakah Mendayakan CGO_ENABLED Memperlahankan Kompilasi, Walaupun Tanpa Pengikatan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!