


Wie k?nnen wir einen generischen Entweder-Typ in Go implementieren, um Entweder/Oder-Rückgabewerte zu verarbeiten?
Dec 07, 2024 pm 01:45 PMImplementieren eines generischen Entweder-Typs in Go
Einführung
Mit dem Aufkommen von Generika in Go 1.18 haben Entwickler über die M?glichkeit nachgedacht, ein Generikum zu erstellen Entweder der Typ [A, B]. Dieser Typ würde ausdrücken, dass ein Wert entweder vom Typ A oder B sein kann. Situationen, in denen ein solcher Typ nützlich w?re, umfassen Funktionen, die einen von zwei m?glichen Werten zurückgeben (z. B. ein normales Ergebnis oder einen Fehler).
W?hrend der idiomatische Ansatz in Go zur Fehlerbehandlung darin besteht, sowohl einen ?normalen“ Wert als auch einen Fehlerwert zurückzugeben, argumentieren einige, dass dies semantisch falsch ist, da es impliziert, dass die Funktion sowohl A als auch B zurückgibt, obwohl die Absicht darin besteht, entweder A oder zurückzugeben B.
Die Herausforderung
Das Erstellen eines Both-Typs in Go stellt eine Herausforderung dar, da seine Schnittstelle eine Methode enthalten muss, die zwei Funktionen als Argumente akzeptiert, eine für Typ A und eine für Typ B. Allerdings , Go erlaubt keine Schnittstellenmethoden, Typparameter zu haben.
Eine von der funktionalen Programmierung inspirierte L?sung
Um diese Einschr?nkung zu umgehen, besteht ein Ansatz darin, die auszuleihen L?sung aus funktionalen Programmiersprachen wie OCaml. In dieser L?sung definieren wir einen optionalen Typ, der entweder einen Wert oder nichts (d. h. None) darstellen kann. Anschlie?end definieren wir einen Entweder-Typ, der zwei optionale Typen umschlie?t, einen für Typ A und einen für Typ B.
type Optional[T any] interface { get() (T, error) } type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] } type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
Die Entweder-Schnittstelle definiert Methoden, um zu bestimmen, ob der Wert ein Left (Typ A) oder ein ist Rechts (Typ B) und den umschlossenen optionalen Typ abrufen. Die Left- und Right-Strukturen implementieren diese Methoden, um die verschiedenen F?lle darzustellen.
Ein Beispiel
Hier ist ein Beispiel für die Verwendung des Entweder-Typs:
import ( "fmt" "os" ) func main() { var e1 Either[int, string] = left[int, string](4143) var e2 Either[int, string] = right[int, string]("G4143") fmt.Println(e1) fmt.Println(e2) if e1.is_left() { if l, err := e1.find_left().get(); err == nil { fmt.Printf("The int is: %d\n", l) } else { fmt.Fprintln(os.Stderr, err) } } if e2.is_right() { if r, err := e2.find_right().get(); err == nil { fmt.Printf("The string is: %s\n", r) } else { fmt.Fprintln(os.Stderr, err) } } }
In In diesem Beispiel erstellen wir zwei Entweder-Werte: e1, ein Left, der eine Ganzzahl enth?lt, und e2, ein Right, der eine Zeichenfolge enth?lt. Wir zeigen, wie ein Mustervergleich für die Werte ?Entweder“ mithilfe der Methoden is_left() und is_right() durchgeführt wird, um auf die zugrunde liegenden Werte zuzugreifen und sie entsprechend zu behandeln.
Das obige ist der detaillierte Inhalt vonWie k?nnen wir einen generischen Entweder-Typ in Go implementieren, um Entweder/Oder-Rückgabewerte zu verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen





GolangoffersSuperiorperformance, NativeConcurrencyViagoroutines und efficienionResourceuse, MakingidealforHigh-Travaffic, niedrig-ladencyapis;

Golang wird haupts?chlich für die Back-End-Entwicklung verwendet, kann aber auch eine indirekte Rolle im Front-End-Bereich spielen. Die Konstruktionsziele konzentrieren sich auf leistungsstarke, gleichzeitige Programmierungen und Systeme auf Systemebene und eignen sich zum Erstellen von Back-End-Anwendungen wie API-Servern, Microservices, verteilten Systemen, Datenbankoperationen und CLI-Tools. Obwohl Golang nicht die Mainstream-Sprache für das Web-Front-End ist, kann er über Gopherjs in JavaScript zusammengestellt werden, auf WebAssembly über Tinygo ausgeführt werden oder HTML-Seiten mit einer Vorlagenmotor zur Teilnahme an der Front-End-Entwicklung erzeugen. Die moderne Front-End-Entwicklung muss jedoch noch auf JavaScript/Typecript und sein ?kosystem beruhen. Daher eignet sich Golang besser für die Auswahl der Technologiestapel mit Hochleistungs-Backend als Kern.

Um ein GraphQLAPI in Go zu erstellen, wird empfohlen, die GQLGen -Bibliothek zur Verbesserung der Entwicklungseffizienz zu verwenden. 1. W?hlen Sie zun?chst die entsprechende Bibliothek wie GQLGen aus, die die automatische Codegenerierung basierend auf dem Schema unterstützt. 2. Definieren Sie dann GraphQlSchema, beschreiben Sie das API -Struktur und das Abfrageportal, z. B. das Definieren von Post -Typen und Abfragemethoden; 3. Initialisieren Sie dann das Projekt und generieren Sie grundlegende Code, um die Gesch?ftslogik in Resolver zu implementieren. 4. Schlie?lich verbinden Sie GraphQlHandler mit HTTPServer und testen Sie die API über den integrierten Spielplatz. Zu den Anmerkungen geh?ren Feldnamenspezifikationen, Fehlerbehandlung, Leistungsoptimierung und Sicherheitseinstellungen, um die Projektwartung sicherzustellen

Der Schlüssel zur Installation von GO besteht darin, die richtige Version auszuw?hlen, Umgebungsvariablen zu konfigurieren und die Installation zu überprüfen. 1. Gehen Sie zur offiziellen Website, um das Installationspaket des entsprechenden Systems herunterzuladen. Windows verwendet .msi -Dateien, macOS. PKG -Dateien, Linux verwendet .tar.gz -Dateien und entpackt sie in /usr /lokales Verzeichnis. 2. Konfigurieren Sie Umgebungsvariablen, bearbeiten Sie ~/.bashrc oder ~/.zshrc in Linux/macOS, um Pfad und GOPath hinzuzufügen, und Windows -Set -Pfad, um die Systemeigenschaften zu verfolgen. 3.. Verwenden Sie das Regierungsbefehl, um die Installation zu überprüfen, und führen Sie das Testprogramm Hello.go aus, um zu best?tigen, dass die Zusammenstellung und Ausführung normal ist. Pfadeinstellungen und Schleifen w?hrend des gesamten Prozesses

Golang verbraucht normalerweise weniger CPU und Speicher als Python beim Erstellen von Webdiensten. 1. Golangs Goroutine -Modell ist effizient bei der Planung, verfügt über eine starke Funktionsverarbeitungsfunktionen und eine geringere CPU -Nutzung. 2. GO wird in nativen Code kompiliert, beruht w?hrend der Laufzeit nicht auf virtuelle Maschinen und hat eine geringere Speicherverwendung. 3. Python hat aufgrund des GIL- und Interpretationsausführungsmechanismus eine gr??ere CPU- und Ged?chtnisaufwand in gleichzeitigen Szenarien; 4. Obwohl Python eine hohe Entwicklungseffizienz und ein reichhaltiges ?kosystem aufweist, verbraucht es eine hohe Ressource, die für Szenarien mit geringen Parallelit?tsanforderungen geeignet ist.

Sync.waitGroup wird verwendet, um auf eine Gruppe von Goroutinen zu warten, um die Aufgabe zu erledigen. Sein Kern besteht darin, drei Methoden zusammenzuarbeiten: hinzufügen, fertig und warten. 1.Add (n) Stellen Sie die Anzahl der Goroutiner fest, um zu warten; 2.Done () wird am Ende jeder Goroutine bezeichnet, und die Anzahl wird um eins reduziert; 3.wait () blockiert die Hauptkorutine, bis alle Aufgaben erledigt sind. Beachten Sie bitte, dass Sie bei der Verwendung au?erhalb der Goroutine doppelte Warten vermeiden, und stellen Sie sicher, dass der Don aufgerufen wird. Es wird empfohlen, es mit Aufhebung zu verwenden. Es ist h?ufig bei der gleichzeitigen Krabbeln von Webseiten, der Stapeldatenverarbeitung und anderer Szenarien und kann den Parallelit?tsprozess effektiv steuern.

Durch die Verwendung von GO -Einbettenpaket k?nnen statische Ressourcen einfach in bin?re und für Webdienste geeignet einbetten, um HTML, CSS, Bilder und andere Dateien zu verpacken. 1. Deklarieren Sie die eingebettete Ressource zum Hinzufügen // Go: Einbetten Sie einen Kommentar vor der Variablen ein, z. B. das Einbettung einer einzelnen Datei hello.txt; 2. Es kann in das gesamte Verzeichnis wie static/*eingebettet werden und die Multi-File-Verpackung durch Einbettung.Fs realisieren; 3.. Es wird empfohlen, den Festplattenlastmodus über Geb?ude- oder Umgebungsvariablen zu wechseln, um die Effizienz zu verbessern. 4. Achten Sie auf Pfadgenauigkeit, Einschr?nkungen der Dateigr??en und schreibgeschützte Merkmale eingebetteter Ressourcen. Die rationale Verwendung von Einbetten kann die Bereitstellung vereinfachen und die Projektstruktur optimieren.

WitchoosingbetweengolangandpythonforCodereadability und Mainainability, thedecisionhingesontampriorities.1.GolangoffersStrictConsistencywithminimal, merkmalatedSyntaxandbuilt-intooling-Likegofmt, und sichergestellt, dass die UniformcodestytenederdearlyRrordetion.2.Pythonpr?r
