Das ist alles, was ich in ZWEI Wochen über Go gelernt habe!

Barbara Streisand
Freigeben: 2024-10-31 04:27:02
Original
765 Leute haben es durchsucht

This is all what I

Wie gehen Sie vor, wenn Sie etwas Neues lernen müssen? Ich habe ein ganz bestimmtes und habe es noch einmal getestet, während ich Golang lernte!

Es gibt zu viel Inhalt, um darüber zu reden, aber mein Ziel ist es hier, Dinge aufzulisten, die ich nützlich fand und für deren Erlernen ich mir ausdrücklich die Zeit genommen habe.

Inhaltsverzeichnis

  • 1. Prolog
  • 2. Lernen Sie die CLI kennen
    • 2.1 CLI: go mod
    • 2.2 CLI: loslaufen
  • 3. Vergleich verschiedener Syntaxen
    • 3.1 Syntax: Klassen/Strukturen und die API-Kapselung
    • 3.2 Syntax: Schnittstellenimplementierung ist SELTSAM WIE FUC*
  • 4. Stdlib: definitiv ein FANTASTISCHES Toolkit
    • 4.1 Pakete: Primitive Typen
    • 4.2 Pakete: Nützliches
  • 5. Tests in Go sind SO EINFACH
    • 5.1 Tests: Grundlegende Tests
    • 5.2 Tests: Jetbrains Boilerplate
    • 5.3 Tests: Tests ausführen
  • 6. Vorsicht vor zyklischen Importen
  • 7. Dies aufschieben, jenes aufschieben... Aber was ist ein Aufschieben?
  • 8. Fehlermanagement für Noobs
  • 9. Fazit: „Low Latency Coding Challenge“

1. Prolog

Seit 2 Wochen lerne und baue ich kleine Anwendungen mit Golang. Im Moment sind es fast 50 Stunden Code durch viele Livestreams und es war ziemlich toll, etwas zu lernen, bei dem ich zuvor ein paar kleine Probleme mit der Sprache hatte.

In dieser zweiwöchigen Reise habe ich Folgendes geschaffen:

  • Eine kleine und WIRKLICH einfache Muschel
  • Eine Redis Basic-Implementierung
  • HTTP 1.1-Protokollimplementierung
  • Eine DNS-Server-Implementierung
  • und einen Jobtest für ein wirklich cooles Unternehmen (der am Ende dieses Artikels verfügbar sein wird).

Und das alles, weil mein Chef mich erneut gebeten hat, eine neue Technologie zu erlernen, um an einigen ScyllaDB PoCs und Demos zu arbeiten ... Ich war mit der Entscheidung nicht allzu zufrieden, aber nun ja, Es ist mein Job.

Im letzten Jahr habe ich Rust studiert und es ist wahrscheinlich immer noch zu komplex für mich, aber ich habe ein paar wirklich coole Konzepte gelernt, die dafür gesorgt haben, dass mein Wechsel zu Go wie ein Zauber funktioniert hat!

In diesem Artikel gebe ich Ihnen einige Tipps und Ratschläge, um Ihren Lernfluss zu beschleunigen.

2. Lernen Sie die CLI kennen

Ich bin ein PHP-Entwickler und an die BESTE CLI gewöhnt, die jemals erstellt wurde (ja, es ist Artisan), aber im Laufe meiner Reise als Entwickler habe ich großartige Projekte erlebt, von denen viele ...:

  • Fracht (Rost)
  • NPM (JS)
  • Komponist (PHP)
  • und so weiter...

Als ich zur Go-Umgebung kam, begann es als echtes Problem. Zumindest für mich könnte die Entwicklererfahrung von Golang in Bezug auf Tools und Dokumentation viel besser sein. Als ich darüber nachdachte, beschloss ich, drei Befehle durchzugehen, die man am Anfang LERNEN MÜSST.

Denken Sie daran: Dies ist nur eine exemplarische Vorgehensweise mit meiner eigenen Erklärung der Dinge. Wenn Sie detaillierte Informationen wünschen, öffnen Sie die Dokumente :)
Außerdem: Go Docs ist scheiße, bitte hat jemand dort einen Syntax-Highlighter eingefügt

2.1 CLI: go mod

Je nachdem, ob Sie Ihre Anwendung modularisieren oder eine organisierte Umgebung haben möchten, ist dies zunächst der nützlichste Befehl.

Der Befehl go mod verwaltet alle Abhängigkeiten innerhalb Ihres Projekts und kümmert sich auch um die automatische Entfernung aller nicht mehr verwendeten Elemente.

Initiieren wir zunächst in Ihrem neuen leeren Ordner ein neues Modul im Projekt mit go mod init:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dadurch wird im Projektstamm eine neue Datei namens go.mod erstellt, die im Grunde den aktuellen Inhalt enthält:

  • Der Modulname
  • Ihre Go-Version

Hier ist die Datei, falls Sie sie selbst überprüfen möchten:

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das nächste, was mir danach wirklich gut gefallen hat, war der Go-Mod Tidy, der im Grunde alle fehlenden Abhängigkeiten hinzufügt und nicht verwendete entfernt.

go mod tidy
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das zweite dient nur dazu, sich daran zu erinnern, dass es das gibt und dass es wirklich nützlich ist! Wahrscheinlich wird Ihre Umgebung es JEDES MAL ausführen und Sie werden sich daran gewöhnen, dass Importe verschwinden :p

2.2 CLI: Ausführen

Dies ist wahrscheinlich der am häufigsten verwendete Befehl, da Sie Ihr Projekt ausführen MÜSSEN, aber so funktioniert es:

  • Sie sollten auf die Datei verweisen, die die Funktion main() enthält.
  • Diese Datei muss sich nicht im Stammverzeichnis Ihres Ordners befinden.

Das Wichtigste bei diesem Befehl ist, dass er beim Ausführen des Befehls „go run“ nach der Datei „go.mod“ in Ihrem aktuellen Verzeichnis sucht und diese als Grundlage für die Zuordnung Ihres gesamten Projekts (Importe, Pakete) verwendet , usw). Hier einige Beispiele:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hier ist unser app.go-Inhalt:

package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt kennen Sie die Grundlagen zur Durchführung eines Projekts! Im wahrsten Sinne des Wortes: Hallo Welt!

3. Vergleich verschiedener Syntaxen:

Mein Problem mit Go war schon immer die Art und Weise, wie es geschrieben ist, aber nach stundenlangem Programmieren wurde mir klar, dass es einfacher ist, als ich dachte. Wie Sie vielleicht schon erraten haben, verfüge ich über fundierte PHP-Kenntnisse und einige Erfahrung mit Rust.

Als ich 2023 anfing, Rust zu lernen, hielt glücklicherweise ein Typ, von dem ich ein großer Fan bin, Nuno Maduro (Laravel), einen Vortrag mit dem Titel „PHP für Rust-Entwickler“, der mir eine grundlegende Einführung in das Thema gab die Syntax und gab mir etwas Luft zum Atmen, während ich völlig von Rust ÜBERRASCHT war.

Jedenfalls hat es mir damals geholfen, also warum nicht ein paar Vergleiche anstellen?

3.1 Syntax: Klassen/Strukturen und die API-Kapselung

In OOP haben wir Klassen, was eine wirklich coole Möglichkeit ist, Ihren Code in kleine Teile zu abstrahieren, und Sie haben so etwas „so etwas“. Golang kann als Odyssee betrachtet werden, denn es kann eine epische Entwicklung sein, die Umgebung so zu verändern, wie man sie haben möchte.

Denken Sie daran, dass Golang eine „High-Level-Sprache“ ist, die eine Syntax auf „Systemebene“ bietet, die es Ihnen ermöglicht, problemlos mit Implementierungen auf „Low-Level“ zu arbeiten.

Unter der Go-Syntax können Sie

  • [Struktur] Definieren Sie eine Struktur, indem Sie ihr den Typ voranstellen, Ihren „Klassen-/Struktur“-Namen hinzufügen und dann das Suffix „Struktur“ hinzufügen.
  • [Kapselung] Definieren Sie die Offenlegung Ihrer klassen-/strukturbezogenen Elemente, indem Sie sie mit Großbuchstaben oder Kleinbuchstaben Namen beginnen.
    • [Sichtbarkeit: „öffentlich“]: Legen Sie den Elementnamen auf Großbuchstaben fest.
    • [Sichtbarkeit: „privat/geschützt“]: Legen Sie den Elementnamen in Kleinbuchstaben fest.

Und Sie können es verwenden für: Strukturen, Strukturfelder, Strukturmethoden. Schauen Sie genauer hin:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In Rust haben Sie einen expliziteren Ansatz (mehr Oop-ähnliche Sprachen), wobei:

  • [Struktur] Definieren Sie eine Struktur mit dem Präfix struct, fügen Sie Ihren „Klassen-/Struktur“-Namen hinzu und fertig.
  • [Kapselung] Wenn Sie möchten, dass etwas für andere „Kisten“ öffentlich ist, sollten Sie das Pub-Präfix in dem Teil des Codes hinzufügen, den Sie offenlegen möchten.
# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Ich würde Dinge wie PHP, Java usw. gerne explizit machen, aber wenn Sie darüber nachdenken, ist WENIGER CODE zu schreiben, aber es wirkt sich auch auf die Lesbarkeit aus.

3.2 Syntax: Schnittstellenimplementierung ist SELTSAM WIE FUC*

Um ehrlich zu sein, gehöre ich zu der Art von Person, die versuchen würde, ich weiß nicht ... LARAVEL in die Go-Umgebung zu integrieren, aber das wurde bereits in Goravel gemacht. Jedenfalls gefällt mir die Idee, mit „Interface/Contract Driven Development“ zu arbeiten, sehr gut und ich bin zum ersten Mal in einer Sprache dabei hängengeblieben.

In Go werden Schnittstellen nicht in einer Struktur/Klasse „implementiert“, und für einen OOP-Typen wie mich ist es einfach verrückt, dass eine solche Designentscheidung in meinen Kopf passt. Schauen Sie sich an, was erwartet wird:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Nun, wenn es darum geht: Sie haben nicht diese explizite Implementierung einer „Schnittstelle“ innerhalb einer Struktur, und das ist, hmm... seltsam? Stattdessen implementieren Sie einfach die erforderlichen Methoden der Schnittstelle, die go zur Kompilierzeit für Sie überprüft. Es ist fair zu wissen, dass es sich um eine kompilierte Sprache handelt und dass es nie ein Problem sein sollte, aber ich spreche über meine Perspektive mit Developer Experience!

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Auf jeden Fall werden Sie sich mit der Zeit, in der Sie in der Sprache programmieren, daran gewöhnen. Lassen Sie uns nun darüber sprechen, was Ihnen die Basisumgebung bietet, ohne dass Sie etwas herunterladen müssen!

4. Stdlib: definitiv ein FANTASTISCHES Toolkit

Jetzt spreche ich über alles, was Go Ihnen mit der Standardbibliothek bietet, ohne dass Sie ein Paket eines Drittanbieters herunterladen müssen. Hier ist eine chronologische Zeitleiste für Sie:

  • 1. Tag: WAS? WARUM MÖGEN SIE JS/Java NICHT, WENN DER TYP ALLE METHODEN TRÄGT? (Und ich hasse beide)
  • 1. Woche: Warte, vielleicht ist das eine gute Sache (nachdem du die Pakete für primitive Typen verstanden hast)
  • 2. Woche: WAS? WARUM HABEN ANDERE SPRACHEN NICHT STANDARDMÄßIG SO GUTE BIBLIOTHEKS?

Damit mache ich keine Witze, jeden Tag, an dem ich go erkunde, habe ich neben den Standardbibliotheken eine coole Bibliothek gefunden. Beginnen wir also damit, über primitive Typen zu sprechen.

4.1 Pakete: Primitive Typen

Wie PHP und im Gegensatz zu vielen anderen Sprachen (Rust, Java, JS usw.) benötigt Golang „Hilfs“--Funktionen, um die meisten zugehörigen Typ-Operationen auszuführen . Wir können sie als „anämische“ Typen betrachten, da mit ihnen kein „Nützlichkeitsfaktor“ verbunden ist.

go mod tidy
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie also mit einem Typ „String“ arbeiten, stehen Ihnen andere Pakete wie strconv oder strings zur Verfügung, um ihn zu manipulieren! Aber hier ist eine goldene Regel, damit Sie nie vergessen, welches Paket Sie sich ansehen sollten: Wenn Ihr Typ ein String ist, suchen Sie nach demselben Paket mit einem pluralisierten Namen!

Kurz gesagt erhalten Sie dadurch Funktionen im Zusammenhang mit []Type und Type:

  • String-Typ -> import („Strings“) für Operationen wie: Contains(), Upper(), Split() ...
  • Byte-Typ -> import („Bytes“) für Operationen wie Include(), Compare(), Split() ...
  • und so weiter!

Schauen Sie sich den Code an, damit Sie ihn selbst validieren können:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das soll einfach sein, aber ich habe eine Weile damit gekämpft, bis es mir in den Sinn kam. Vielleicht hat mich die jahrelange Nutzung von Laravel und seinen Hilfsfunktionen vergessen, wie schwierig es ist, ohne Framework zu programmieren :D

4.2 Pakete: Nützliches

Während ich Tools und Projekte erkundete, bekam ich eine wirklich gute Einführung in viele Projekte und ich möchte jedes einzelne davon und die von mir verwendeten Bibliotheken auflisten:

  • Erstellen Sie Ihre eigene Shell Challenge:
    • Pakete:
      • fmt: I/O-Bibliothek (Inhalte auf Ihrem Bildschirm scannen/lesen und schreiben)
      • Betriebssystem: Funktionen und Helfer, die direkt mit Ihrem Betriebssystem kommunizieren.
      • strconv: Konvertieren Sie bestimmte Datentypen in einen String oder wandeln Sie einen String in einen beliebigen definierten Typ um.
  • Erstellen Sie Ihre eigene (HTTP|DNS) Server-Herausforderung:
    • Pakete:
      • net: Integrationsschicht mit Netzwerk-E/A-Protokollen wie HTTP, TCP, UDP und Unix Domain Sockets
      • [vorherige Pakete...]
  • Aufgabe einer Hausaufgabe auf mittlerem Niveau?
    • Pakete:
      • Flag: Erfasst Ihre CLI-Argumente in Variablen
      • log: Fügt die Kanäle von Log zu Ihrer Anwendung hinzu
      • Krypto/Rand:Sicherer kryptografischer Zufallsgenerator
      • Mathe/Rand:Zufallsgenerator für mathematische Zahlen
      • Zeit:Dauer/Zeit-Library

Hier ist eine scrollbare Ansicht aller Paketimplementierungen, damit Sie sie überprüfen können. Es gibt VIELE coole Standardpakete, die hier zitiert werden können.

ACHTUNG: Das ist VIEL CODE! :p
Vergessen Sie nicht, Ihre Lieblingsfunktionen (außer Goroutinen und Kanälen) zu kommentieren :p

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Im Ernst, das ist einfach unglaublich! Also, machen wir jetzt weiter mit den Tests.

5. Tests in Go sind SO EINFACH

In meinem zweiten Projekt mit Go sah ich eine Möglichkeit, Tests zu lernen, während ich Requests and Responses-Objekte erstellte. Innerhalb der PHP-Umgebung verwenden Sie wahrscheinlich eine Bibliothek eines Drittanbieters wie PHPUnit oder Pest. Rechts? In der Go-Umgebung ist dies EINFACH! Alles was Sie tun müssen ist:

  • Erstellen Sie eine Datei in einem Paket:In person.go schreiben Sie die Funktionen, die Sie testen möchten;
  • Erstellen Sie eine Testdatei für Ihr Paket:** Erstellen Sie eine Datei namens person_test.go und beginnen Sie mit dem Schreiben Ihrer eigenen Tests!

Nehmen wir an, wir haben „requests.go“ und „requests_test.go“ in unserem Paketordner, wobei „requests.go“ ist:

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

5.1 Tests: Grundlegende Tests

Ein Test in Go gilt als BESTANDEN (grün), wenn (t *Testing.T).Errorf() nicht innerhalb Ihrer Testfunktion aufgerufen wird. Es folgt auch dem gleichen Kapselungskonzept, das zuvor eingeführt wurde:

  • Testfunktionen, die mit Großbuchstaben beginnen, werden vom Test Runner
  • identifiziert
  • Testfunktionen, die mit Kleinbuchstaben beginnen, werden ignoriert (normalerweise Hilfsfunktionen)
mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können zum Testen Ihre eigenen Hilfsfunktionen ausführen. Stellen Sie nur sicher, dass Sie bei diesen Tests nicht in die Moduldomäne eindringen!

5.2 Tests: Jetbrains Boilerplate

Ich benutze Goland seit dem ersten Tag, daher sind die meisten Dinge für mich einfacher. Jedes Mal, wenn ich einen neuen Test starte, erhalte ich dieses Boilerplate mit einer Unity-Teststruktur, die standardmäßig parallel läuft (Goroutinen).

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

5.3 Tests: Tests durchführen

Ok, jetzt wissen wir wie einfach es ist, Tests in Go zu zu schreiben, aber wie wäre es, wenn man sie durchführt?
Einfache Aufgabe

! Sie müssen lediglich zum Paketordner navigieren und Folgendes ausführen:
go mod tidy
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Bitte notieren Sie sich einige Tests für Ihre Sachen. Es ist nicht so schwer, wenn man entkoppelt, was benötigt wird :p

6. Vorsicht vor zyklischen Importen Während meiner letzten Entwicklungsjahre habe ich immer versucht, alle meine Projekte so zu modularisieren, dass sie meinen Bedürfnissen entsprechen, ohne bei „Clean Arch“ oder „Domain Driven Design“-Zeug hängen zu bleiben . Bei meinen ersten Versuchen, meine Pakete aufzuteilen, bekam ich jedoch den Fehler

„Zyklischer Import“

und dachte mir: Wie lange ist es her, dass ich so etwas gesehen habe? Während meiner zwei Jahre in PHP hatte ich das gleiche Problem mit der Importhölle, bei der man nicht

nicht ZWEIMAL dieselbe Datei importieren konnte

in einem bestimmten Ablauf. Das war, bevor ich PSR-4 (Autoloading) kennenlernte (was meine PHP-Tage für immer veränderte!!) und jetzt, vor Jahren, habe ich in Go damit zu kämpfen.

Betrachten wir ein Szenario mit zyklischen Importen:
# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren


Wenn Sie versuchen, etwas zu kompilieren, das zyklische Importe in Go kennzeichnet, erhalten Sie eine Fehlermeldung wie:
package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Und in diesem Moment müssen Sie damit beginnen, Ihre Abhängigkeiten/Pakete aufzuschlüsseln, um dies zu vermeiden.

TLDR
: Importieren Sie nicht dasselbe Paket an einem Ort, der viele Male geladen wird.

7. Dies aufschieben, jenes aufschieben ... Aber was ist ein Aufschieben? Ich habe nicht nachgeschlagen, aber es war das erste Mal, dass ich das reservierte Wort „defer“ in einer Programmiersprache gesehen habe. Und da es nicht zu den

„generisch reservierten Wörtern“

gehörte, habe ich es eine ganze Woche lang ignoriert!

Dann gab mir einer meiner Arbeitskollegen, Dusan, eine Lektion zum Gedächtnismanagement in Go, nachdem er gesehen hatte, wie ich ein paar Stunden lang mit der Sprache zu kämpfen hatte. (Ja, das ist ein Dankeschön :p)

Die Sache ist: Immer wenn Sie einen Puffer/eine Verbindung zu etwas öffnen, SOLLTEN Sie IHN SCHLIESSEN! Ich erinnere mich, als ich 2014 mit MapleStory-Servern (Java) arbeitete, war das häufigste Problem Speicherlecks, einfach weil die Entwickler die Verbindungen zur Datenbank nicht geschlossen haben.

Das darf man VERGESSEN! Aber es ist nicht in Ordnung, die Codeüberprüfung zu bestehen, LOL

Hier ist ein Beispiel in Java:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beim Codieren von Golang geben sie dieses Verzögerungsattribut an, damit Sie daran denken, Ihre Dateien direkt nach dem Öffnen zu schließen.

Defer steht für „Deference“, was eine Möglichkeit ist, Ihre Ressourcen zu „zu bereinigen“, nachdem die Ausführung dieses bestimmten Teils des Codes beendet ist.

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie können auch viele Verzögerungen innerhalb einer Funktion haben und die VERZÖGERUNGSREIHENFOLGE ist wichtig! Wenn Sie Datenbank2 und dann Datenbank1 zurückstellen, werden beide Prozesse in derselben Reihenfolge bereinigt.

go mod tidy
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies ist eine wirklich einfache Möglichkeit, keinen Fehler zu machen und zu verhindern, dass Ihr Projekt einen Speicherverlust erleidet. Bitte denken Sie daran, es immer dann zu verwenden, wenn Sie etwas streamen.

8. Fehlermanagement für Noobs

Die Fehlerbehandlung sieht zunächst etwa so aus: Überprüfen Sie, ob die von Ihnen verwendete Funktion einen Fehlertyp zurückgibt, und validieren Sie ihn JEDES VERDAMMTE MAL! Hier ist ein Beispiel dafür, wovon ich spreche:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Um ehrlich zu sein, hasse ich diese Syntax. Es ist jedoch Teil der Sprache und wird Ihnen im Laufe Ihrer Programmiertage begegnen.

Funktionen mit Fehlern können Fehler oder (T, Fehler) zurückgeben, und glücklicherweise lässt Go Sie das nicht vergessen.

package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Spamen Sie Ihren Code mit err != nil und alles wird gut, das verspreche ich! :D

9. Abschlussleistung: Codierungsherausforderung mit geringer Latenz

Abgesehen von all dem Stress und den Stunden, die ich damit verbracht habe, die Umgebung zu verstehen, war es eine coole Herausforderung, gemeinsam mit meinen Twitch-Zuschauern eine neue Sprache zu lernen. Viele von ihnen haben mich schon lange gebeten, es mir anzusehen, und hier sind wir.

Alle diese Punkte spiegeln meine persönlichen Entwicklungserfahrungen mit der Sprache wider, und das Ziel bestand darin, Dinge zu teilen, die ich während dieser zwei Wochen, in denen ich sie gelernt habe, durchgemacht habe.

9.1 Bonus: Coding Challenge

Kürzlich wurde ich von meinem Teamkollegen herausgefordert, eine ScyllaDB-Herausforderung zu meistern, und dabei habe ich viel über Parallelität, Pools und Ratenbegrenzung gelernt. Vor dieser Art von Herausforderung stehen viele Unternehmen, um die Leistung ihrer Produkte zu verbessern!

Das Ziel der Herausforderung besteht darin, eine kleine Go-Befehlszeilenanwendung zu erstellen, die einige zufällige Daten in ScyllaDB einfügt und gleichzeitig die Anzahl der Anfragen begrenzt.

Die Repository-Challenge finden Sie hier: github.com/basementdevs/throttling-requests-scylla-test. Wir stellen auch ein! Die offenen Stellen finden Sie in unserem Karrierebereich!

Vielen Dank fürs Lesen! Ich hoffe, dieser Artikel hat wertvolle Einblicke in das Erlernen von Golang gegeben. Teilen Sie gerne Ihre Gedanken oder Erfahrungen mit.

Das obige ist der detaillierte Inhalt vonDas ist alles, was ich in ZWEI Wochen über Go gelernt habe!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage