Wie verwalte ich Funktionen für ähnliche Go-Strukturen mit gemeinsam genutzten Feldern?

DDD
Freigeben: 2024-10-29 04:52:02
Original
167 Leute haben es durchsucht

How to Manage Functions for Similar Go Structs with Shared Fields?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Dadurch können Sie die Version mit der PrintVersion-Methode im Versionsfeld drucken:

<code class="go">g.PrintVersion()
e.PrintVersion()</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!