So implementieren Sie eine gemeinsame Methode für Strukturen mit einem gemeinsamen Feld in Go
Beim Umgang mit mehreren Strukturen, die ein gemeinsames Feld haben, wird die Oft besteht die Notwendigkeit, eine gemeinsame Methode für diese Strukturen zu implementieren. Während Vererbung oder Mixins als praktikable Ansätze erscheinen mögen, stoßen sie in Go an Einschränkungen.
Ein Ansatz besteht darin, eine Schnittstelle zu definieren, die die gewünschte Methode angibt, wie unten gezeigt:
type Savable interface { Save() } // Satisfy Savable for ModelA func (m ModelA) Save() { // Implement Save() for ModelA } var i Savable i = SomeMethodThatReturnsMyModel() i.Save() // Call Save() on the implementing type SomeOtherMethodThatAcceptsASavableAndCallsSave(i)
Alternativ: Durch Einbetten kann eine Wiederverwendung von Code erreicht werden. Dies erfordert jedoch sorgfältige Überlegung, da die eingebetteten Felder beim Aufruf von o.Insert(this) nicht eingefügt werden, es sei denn, sie sind auch im eingebetteten Typ definiert.
type ModelC struct { Guid string `orm:"pk"` } func (m ModelC) Save() { // Implement Save() for ModelC } type ModelA struct { ModelC FiledA string } type ModelB struct { ModelC FiledB string }
Es ist wichtig zu bedenken, dass dies bei der Einbettung nicht der Fall ist Unterstützt das Überschreiben vererbungsbasierter Methoden. Das Neudefinieren von Save() in der eingebetteten Struktur und das Aufrufen der Methode der Basisklasse innerhalb der Neudefinition wird in Go nicht als bewährte Vorgehensweise angesehen.
Bei der Abwägung zwischen den beiden Ansätzen ist es wichtig, die spezifischen Anforderungen und Kompromisse zu bewerten beteiligt. Der Schnittstellenansatz bietet mehr Flexibilität, während die Einbettung Leistungsvorteile bieten kann, aber eine sorgfältige Berücksichtigung des Verhaltens des eingebetteten Felds erfordert.
Das obige ist der detaillierte Inhalt vonWie implementiert man gemeinsame Methoden für Go-Strukturen mit gemeinsamen Feldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!