Mengapa Masa Kompilasi Lebih Lambat dengan `CGO_ENABLED=0` dalam Go?

DDD
Lepaskan: 2024-11-07 09:33:03
asal
700 orang telah melayarinya

Why is Compilation Time Slower with `CGO_ENABLED=0` in Go?

Perlahan dalam Masa Kompilasi dengan CGO_ENABLED=0

Apabila membangunkan program Go berkaitan rangkaian, percanggahan ketara dalam kelajuan kompilasi boleh diperhatikan antara membina dengan CGO_ENABLED=0 dan yang tidak. Ini terbukti walaupun dalam contoh pelayan HTTP asas:

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)
    }
}
Salin selepas log masuk

Tanda aras masa kompilasi mendedahkan kelembapan 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
Salin selepas log masuk

Walaupun tiada sebarang pengikatan C langsung, kelembapan ini berterusan. Punca asas terletak pada proses binaan.

Peranan Bendera Bina

CGO_ENABLED ialah salah satu daripada banyak bendera binaan yang digunakan semasa penyusunan untuk mengkonfigurasi pengoptimuman dan memasukkan kod C. Apabila bendera ini ditetapkan kepada 0, pakej perpustakaan standard pra-bina tidak boleh digunakan semula. Akibatnya, sebahagian besar perpustakaan standard mesti disusun semula, membawa kepada kelembapan yang diperhatikan.

Pendekatan Alternatif

Semasa memasang pakej pra-bina dengan go build -i boleh mempercepatkan binaan masa hadapan dengan CGO_ENABLED=0, ia tidak menangani isu untuk binaan tanpa CGO_ENABLED. Untuk menyokong kedua-dua konfigurasi binaan dengan cekap, direktori pemasangan yang berasingan harus digunakan melalui bendera -installsuffix dan -pkgdir. Pengasingan ini memastikan pakej yang dibina dengan bendera yang berbeza tidak menimpa satu sama lain.

Atas ialah kandungan terperinci Mengapa Masa Kompilasi Lebih Lambat dengan `CGO_ENABLED=0` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan