„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Bautechniken: Ein tiefer Einblick in Go

Bautechniken: Ein tiefer Einblick in Go

Veröffentlicht am 08.11.2024
Durchsuche:564

Building Techniques: A Deep Dive into Go

Go war eine wichtige Sprache in meiner persönlichen Karriere. Als ich CTO bei Soundcast war, habe ich damit einen soliden Audio-AdServer und SSP aufgebaut. Go macht Vernetzung und Parallelität so einfach, dass es sich wie Betrug anfühlt. Und das alles mit einer wirklich guten Leistung, die perfekt für die Aufgabe war, die wir zu erledigen hatten.

In Teil 1 haben wir die Grundlagen der Erstellungsphase von Software vorgestellt. In diesem Artikel werden wir dies anhand einer Sprache, die mir besonders am Herzen liegt, noch relevanter machen. Obwohl die Grundlagen der Softwareerstellung in allen Sprachen ähnlich sind, verfügt jedes Sprachökosystem über seine eigenen einzigartigen Tools und Praktiken.

Lassen Sie uns diese ohne weitere Umschweife untersuchen, mit besonderem Fokus auf Go.

Gos Ansatz zum Bauen

Go wurde von Google entwickelt und verfolgt einen einzigartigen Ansatz beim Erstellen, bei dem Einfachheit und Geschwindigkeit im Vordergrund stehen.

Ein Befehl

Go wird mit einem Build-Befehl geliefert. Dieser Befehl kompiliert die durch die Importpfade benannten Pakete zusammen mit ihren Abhängigkeiten, installiert die Ergebnisse jedoch nicht. Es generiert eine ausführbare Datei.

Beispiel:

go build main.go

Cross-Compilation in Go

Eine der nützlichsten Funktionen des Go-Compilers ist die Möglichkeit, eine Kreuzkompilierung bemerkenswert einfach durchzuführen. Sie müssen lediglich die Umgebungsvariablen GOOS und GOARCH so festlegen, dass sie auf die gewünschten Plattformen abzielen.

Beispiel:

GOOS=windows GOARCH=amd64 go build main.go

Dadurch wird eine ausführbare Datei für Windows unter einer amd64-Architektur erstellt.

Go-Module

Der Go-Mod kam etwas spät, da er mit Go 1.11 eingeführt wurde, aber es handelt sich um ein integriertes Abhängigkeitsverwaltungssystem. Zuvor mussten wir alle unsere Go-Projekte in einem speziellen Verzeichnis auf unserem Computer namens {$GOPATH} ablegen. Obwohl es funktioniert hat, gibt uns der Go-Mod jetzt mehr Flexibilität, was großartig ist!

Die Verwendung ist ziemlich einfach, wie alles in Go.

  • go mod init initialisiert ein neues Modul.
  • Die Datei go.mod verfolgt Abhängigkeiten und ihre Versionen.

Sie können eine bedingte Kompilierung hinzufügen, indem Sie Build-Tags verwenden, aber die interessanteste Funktion ist meiner Meinung nach, dass Go die Build-Ausgabe automatisch zwischenspeichert, um nachfolgende Builds zu beschleunigen (natürlich können Sie den Cache bei Bedarf bereinigen).

Fortgeschrittene Go-Building-Techniken

Ressourcen einbetten

Wenn Sie statische Dateien haben, die Sie in Ihre Binärdatei einbinden möchten, können Sie die Direktive //go:embed verwenden.

Rassenerkennung

Go ist großartig, wenn es um Parallelität geht. Mit seinem System aus Goroutinen und Kanälen für die Kommunikation zwischen ihnen können Entwickler die Arbeitslast der Software problemlos auf verschiedene Kerne aufteilen. Aber es ist auch leicht, Dinge durcheinander zu bringen und „Rennen“ zu schaffen.

Ein Datenwettlauf tritt auf, wenn zwei Goroutinen gleichzeitig auf dieselbe Variable zugreifen und mindestens einer der Zugriffe ein Schreibzugriff ist. Weitere Informationen finden Sie im The Go Memory Model.

Der Go-Compiler kann Ihnen dabei helfen, sie zu finden!

Verwenden Sie das Race-Flag, um Race-Bedingungen zu erkennen:

go build -race main.go

Profilierung und Optimierung

Eines der wichtigsten Dinge, die mir an Go gefallen, ist die Leistung. Diese Sprache liefert ohne großen Aufwand solide Ergebnisse. Wenn Sie aber noch einen Schritt weiter gehen möchten, bietet Ihnen das Go-Ökosystem auch einige wirklich tolle Tools, mit denen Sie Ihre Leistung messen und Ihren Code optimieren können.

Ich werde nicht auf die Details eingehen, aber wenn Sie in das Thema eintauchen möchten, lade ich Sie ein, dieses Juwel zu lesen: https://www.practical-go-lessons.com/chap-34-benchmarks

Benutzerdefinierte Build-Modi

Manchmal erstellen Sie keine Software, sondern beispielsweise ein Plugin oder eine Bibliothek. Das Go-Team steht Ihnen zur Seite. In Go können Sie den Buildmodus definieren, um das gewünschte Ergebnis zu erhalten!

  • Geteilte Bibliotheken erstellen: go build -buildmode=c-shared
  • Plugins erstellen: go build -buildmode=plugin
  • Die vollständige Liste erhalten Sie unter https://pkg.go.dev/cmd/go#hdr-Build_modes

Wie Sie sehen, bietet Go in seinem Compiler und Ökosystem viele Funktionen, die es Entwicklern ermöglichen, das Beste aus der Go-Technologie herauszuholen.

Und das war's für heute. Ich werde diese Woche einen weiteren Artikel veröffentlichen, der die Erstellungstechniken für TypeScript vorstellt. Abonnieren Sie ihn also oder folgen Sie ihm, wenn Sie ihn nicht verpassen möchten!

Bis dahin viel Spaß beim Codieren!

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/gdsources/building-techniques-a-deep-dive-into-go-27ed?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3