Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verlangsamt das Deaktivieren von CGO die Go-Kompilierung, auch ohne C-Bindungen zu verwenden?

Warum verlangsamt das Deaktivieren von CGO die Go-Kompilierung, auch ohne C-Bindungen zu verwenden?

Susan Sarandon
Susan SarandonOriginal
2024-11-09 00:52:02870Durchsuche

Why Does Disabling CGO Slow Down Go Compilation Even Without Using C Bindings?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn