eingebettete Strukturen und Methoden erbend
Gibt es eine Alternative zu eingebetteten Strukturen für die Erben von Methoden? Eine alternative Methode, um Methoden eines Typs zu erben, ohne eingebettete Strukturen zu verwenden. Es erfordert jedoch ein tieferes Verständnis von Go's Types System. Als ob sie Teil der enthaltenden Struktur wären. Dies ist ein kraftvolles Merkmal, mit dem die Erbschaften zwischen Typen erstellt werden können. automatisch zur enthaltenden Struktur gefördert. Um Methoden zu fördern, muss die eingebettete Struktur anonym sein. Sie waren Methoden der enthaltenden Struktur. Dies wird erreicht, indem folgende Regeln folgt:
Wenn das anonyme Feld type t hat, haben beworbene Methoden Empfänger vom Typ t und *t.
Wenn das anonyme Feld Typ *t hat , Beförderte Methoden haben Empfänger von Typ t oder *t.
example
Betrachten Karte [String] Schnittstelle {} Func (p Requisiten) getString (Schlüsselstring) String { Return P [Schlüssel]. (String) } Geben Sie die Knotenstruktur {ein Requisiten } func main () { Knoten: = Node {"Test": "Foo"} fmt.println (node.getString ("test")) // output: foo }
In diesem Beispiel bettet die Knotenstruktur eine anonyme Struktur von Typ -Requisiten ein. Dies ermöglicht es der GetString -Methode von Props, zum Knoten befördert zu werden. Durch Übergeben eines Zeigers an die Empfängerfunktion können Sie auf die Felder und Methoden der zugrunde liegenden Struktur zugreifen, ohne sie einbetten zu müssen. Verwenden eines Zeigerempfänger func (p *props) getString (Schlüsselstring) String { Return P [Schlüssel]. (String) } Geben Sie die Knotenstruktur {ein Requisiten } func main () { Knoten: = & node {props {"test": "foo"}} fmt.println (node.getString ("test")) // output: foo }
In diesem Beispiel verwenden wir einen Zeigerempfänger für die GetString -Methode. Dies ermöglicht uns, auf die Felder und Methoden der zugrunde liegenden Props -Strukturen zuzugreifen, ohne sie einbetten zu müssen. sind nicht immer die beste Wahl. In Fällen, in denen keine Methodenförderung gewünscht oder notwendig ist, kann die Verwendung eines Zeigerempfängers eine flexiblere und leistungsfähigere Alternative liefern.
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