Heim > Artikel > Backend-Entwicklung > Warum verlangsamt das Deaktivieren von CGO die Go-Kompilierung, auch ohne C-Bindungen zu verwenden?
Warum das Kompilieren mit CGO_ENABLED=0 zu einer Verlangsamung führte
Obwohl keine C-Bindungen verwendet werden, verlangsamt das Kompilieren mit CGO_ENABLED=0 die Kompilierung merklich. Um die Ursache zu verstehen, müssen wir uns mit den Mechanismen befassen, die im Spiel sind.
Die Standardbibliothekspakete werden mithilfe vorgegebener Kompilierungsflags erstellt. Wenn CGO_ENABLED auf 0 gesetzt ist, werden die Build-Flags geändert, wodurch die vorgefertigten Pakete inkompatibel werden. Folglich muss der Großteil der Standardbibliothek neu erstellt werden.
Obwohl „go build -i“ Pakete installieren kann, die mit den neuen Flags erstellt wurden, wird das Problem dadurch nicht vollständig gelöst. Die Installation von Paketen, die mit CGO_ENABLED=0 erstellt wurden, beschleunigt zukünftige Builds mit demselben Flag, behindert jedoch Builds ohne dieses Flag.
Die Standardinstallationsmethode für vorgefertigte Pakete ist ineffizient, da alle Pakete identisch im selben Verzeichnis gespeichert werden Namen unabhängig von ihrer Build-Konfiguration. Um schnelle Builds mit unterschiedlichen Flags zu ermöglichen, sollte „go build -i“ mit den Flags „-installsuffix“ oder „-pkgdir“ kombiniert werden. Durch die Zuweisung eines eindeutigen Verzeichnisses für jeden Kompilierungsmodus können separate Builds mit unterschiedlichen Flags nahtlos berücksichtigt werden.
Das obige ist der detaillierte Inhalt vonWarum verlangsamt das Deaktivieren von CGO die Go-Kompilierung, auch ohne C-Bindungen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!