Heim >Backend-Entwicklung >Golang >Wie verwalte ich Funktionen für ähnliche Go-Strukturen mit gemeinsam genutzten Feldern?
Best Practice von Go: Funktionen für ähnliche Strukturen mit gemeinsamen Feldern verwalten
In Go kommt es häufig vor, dass mehrere Strukturen mit ähnlichen Feldern vorhanden sind Es besteht die Notwendigkeit, identische Operationen an ihnen durchzuführen. Um Codewiederholungen zu vermeiden und gleichzeitig die Flexibilität zu wahren, ziehen Sie die folgenden Strategien in Betracht:
Erstellen eines benutzerdefinierten Typs für das freigegebene Feld:
Wenn das freigegebene Feld ein einfacher Datentyp ist ( (z. B. Zeichenfolge) sollten Sie darüber nachdenken, einen benutzerdefinierten Typ dafür zu definieren. Dadurch können Sie Methoden an den benutzerdefinierten Typ anhängen, die dann von jeder Struktur verwendet werden können, die diesen Typ einbettet.
<code class="go">type Version string func (v Version) PrintVersion() { fmt.Println("Version is", v) }</code>
Dann betten Sie den Versionstyp in die Strukturen ein:
<code class="go">type Game struct { Name string MultiplayerSupport bool Genre string Version } type ERP struct { Name string MRPSupport bool SupportedDatabases []string Version }</code>
Dadurch können Sie die Version mit der PrintVersion-Methode im Versionsfeld drucken:
<code class="go">g.PrintVersion() e.PrintVersion()</code>
Mit Reflection:
Wenn das gemeinsame Feld unterschiedliche Typen haben kann Wenn Sie mehr Flexibilität wünschen, können Sie Reflektion verwenden, um die entsprechende Methode dynamisch aufzurufen. Dieser Ansatz ist komplexer und hat einige Auswirkungen auf die Leistung, bietet aber mehr Flexibilität.
<code class="go">type Printer interface { PrintVersion() error } func PrintVersion(p Printer) error { t := reflect.TypeOf(p) method, ok := t.MethodByName("PrintVersion") if !ok { return fmt.Errorf("object doesn't have a PrintVersion method") } return method.Func.Call([]reflect.Value{reflect.ValueOf(p)})[0].Interface().(error) }</code>
Sie können dann die PrintVersion-Funktion verwenden, um die PrintVersion-Methode für jedes Objekt aufzurufen, das die Druckerschnittstelle implementiert:
<code class="go">var game Game var erp ERP PrintVersion(game) PrintVersion(erp)</code>
Das obige ist der detaillierte Inhalt vonWie verwalte ich Funktionen für ähnliche Go-Strukturen mit gemeinsam genutzten Feldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!