Best Practices für die Nutzung einer gemeinsamen Funktion über Strukturen hinweg mit identischen Feldern
In Szenarien, in denen zwei Strukturen identische Felder besitzen, ist es wünschenswert, dies zu verhindern Codeduplizierung beim Definieren von Methoden, die mit diesen Feldern arbeiten.
Benutzerdefinierter Typ als Methode Empfänger
Der empfohlene Ansatz besteht darin, einen benutzerdefinierten Typ (z. B. Version) einzuführen, der als Methodenempfänger dient. Da alle benutzerdefinierten Typen als Methodenempfänger verwendet werden können, ermöglicht diese Technik die Erstellung einer einzelnen Methode, die auf mehrere Strukturen angewendet werden kann.
Zusammensetzung
Sobald die benutzerdefinierte Ist der Typ definiert, kann er per Komposition in die Strukturen eingebunden werden. Dazu gehört das Einbetten des benutzerdefinierten Typs in die Strukturen, wodurch im Wesentlichen eine verschachtelte Struktur erstellt wird.
Beispiel
Betrachten Sie den folgenden Codeausschnitt:
type Version string
func (v Version) PrintVersion() {
fmt.Println("Version is", v)
}
type Game struct {
Name string
MultiplayerSupport bool
Genre string
Version
}
type ERP struct {
Name string
MRPSupport bool
SupportedDatabases []string
Version
}
Hier dient der Versionstyp als Methodenempfänger, und auf seine PrintVersion-Methode kann sowohl von der Game- als auch von der ERP-Struktur aufgrund ihrer eingebetteten Versionsfelder zugegriffen werden.
Verwendung
Das eingebettete Versionsfeld kann wie jedes andere Feld verwendet und geändert werden:
main() {
g := Game{
"Fear Effect",
false,
"Action-Adventure",
"1.0.0",
}
g.PrintVersion() // Version is 1.0.0
e := ERP{
"Logo",
true,
[]string{"ms-sql"},
"2.0.0",
}
e.PrintVersion() // Version is 2.0.0
}
Durch die Verwendung dieses Ansatzes wird die mit doppelten Methoden verbundene Codewiederholung eliminiert, während gleichzeitig Flexibilität und Typsicherheit gewahrt bleiben.
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