2016-05-13 18 views
0

Ich versuche, Erben in Golang zu implementieren. Nachfolgend finden Beispiel:Machen Sie Objekt in geerbter Methode in Golang zugänglich

type A struct { 
    Number int 
} 

type B struct{ 
    A 
    name String 
} 

func (a A) GetNumber() { 
    // Here I want to use instance of B 
    fmt.Println(a) // but this is giving me instance of A 
} 

Ist es möglich Instanz von B in Abhängigkeit von A zu erhalten, wenn A nach B geerbt wird?

+2

Es gibt keine Vererbung in Go. Einige verwandte/mögliche Duplikate: [1] (http://stackoverflow.com/questions/21251242/is-it-possible-to-call-overridden-method-from-parent-struct-in-golang), [zwei] (http://stackoverflow.com/questions/30622605/can-embedded-struct-method-have-knowledge-of-parent-child), [drei] (http://stackoverflow.com/questions/29390736/go- embedded-struct-call-child-method-stattdessen-Eltern-Methode), [vier] (http://stackoverflow.com/questions/29144622/what-is-the-idiomatic-way-in-go-to-create -a-Komplex-Hierarchie von Strukturen. – icza

Antwort

1

Zunächst einmal gibt es einen Fehler in Ihrem Code. Bis Sie keinen anderen Typ erstellt haben, der als String definiert ist, müssen Sie ihn auf string korrigieren.

Dann können Sie in Go Composite-Strukturen verwenden, was bedeutet, dass Sie direkt auf ein Struct-Feld zugreifen können, das in einer anderen Struktur enthalten ist, wie Sie bereits getan haben.

Dies bedeutet, dass Sie eine Methode auf einem Methodenempfänger aufrufen können, für den die struct-Felder deklariert sind. So korrigieren Sie Ihr Beispiel, wenn ich richtig verstehe Ihre Frage:

package main 

import (
    "fmt" 
) 

type A struct { 
    Number int 
} 

type B struct{ 
    A 
    name string 
} 

func main() { 
    b := &B{A{1}, "George"} 
    b.GetValues() 
} 

func (b B) GetValues() {  
    fmt.Println(b.Number) 
    fmt.Println(b.name) 
} 

Im Beispiel unten, weil struct A in struct B enthalten ist, bedeutet dies, können Sie eine Struktur Feld in struct A im GetValues ​​Methode deklariert aufrufen. Dies liegt daran, dass struct B die Felder struct A erbt.

https://play.golang.org/p/B-XJc6jddE