Best Practices für Gewerkschaften in Go
In Go fehlen Gewerkschaften, obwohl sie in der Programmierung allgegenwärtig sind. Um dieses fehlende Feature zu beheben, sind verschiedene Ansätze entstanden.
Ein gängiger Ansatz besteht darin, für jeden möglichen Typ in der Union separate Strukturen zu definieren und eine dieser Strukturen in einer Containerschnittstelle zu speichern. Diese Methode bietet Typsicherheit, führt jedoch zu erheblicher Coderedundanz. Wie im bereitgestellten Beispiel zu sehen ist, ist für jeden Typ in der Union eine Vielzahl von Konstruktor-, Prädikat- und Getter-Funktionen erforderlich.
Um diese Redundanz zu verringern, sollten Sie erwägen, eine Schnittstelle zu definieren, die Objekte als zur Union gehörend markiert. Dadurch können Funktionen auf Misc-Elemente einwirken, ohne deren konkrete Typen später anzugeben.
Zum Beispiel:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
Mit diesem Ansatz können Funktionen Misc-Objekte generisch verarbeiten:
func HandleMisc(m Misc) { switch m.(type) { case Comment: fmt.Println("It's a comment") case ProcessingInstruction: fmt.Println("It's a processing instruction") } }
Obwohl diese Methode ein gewisses Maß an Vereinfachung bietet, erfordert sie dennoch eine Typzusicherung, um auf den tatsächlichen Typ des Objekts zuzugreifen.
Zu Um echte Gewerkschaften nachzuahmen, stellt das bereitgestellte Beispiel den bevorzugten Ansatz dar. Es führt jedoch zu Code-Redundanz. Leider gibt es in Go keine allgemein akzeptierte Möglichkeit, diesen Prozess zu vereinfachen.
Das obige ist der detaillierte Inhalt vonWie können wir Gewerkschaften in Go effektiv simulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!