Heim > Backend-Entwicklung > Golang > So erhalten Sie einen Verweis auf einen konkreten Typ aus einem Verweis auf eine Schnittstelle

So erhalten Sie einen Verweis auf einen konkreten Typ aus einem Verweis auf eine Schnittstelle

王林
Freigeben: 2024-02-09 16:39:14
nach vorne
899 Leute haben es durchsucht

So erhalten Sie einen Verweis auf einen konkreten Typ aus einem Verweis auf eine Schnittstelle

In PHP ist eine Schnittstelle eine abstrakte Klasse, die eine Reihe von Methoden definiert. Durch die Implementierung einer Schnittstelle können wir sicherstellen, dass eine Klasse ein bestimmtes Verhalten aufweist. Manchmal müssen wir jedoch von einer Referenz auf eine Schnittstelle eine Referenz auf einen konkreten Typ erhalten. Dies kann in einigen Fällen zu Verwirrung führen. In diesem Artikel erfahren Sie, wie Sie aus einer Referenz auf eine Schnittstelle eine Referenz auf einen konkreten Typ erhalten. Egal, ob Sie Anfänger oder erfahrener Entwickler sind, dieser Artikel wird Ihnen helfen. Kommen wir als Nächstes zur Sache und erkunden die Lösung für dieses Problem.

Frageninhalt

Ich versuche zu verstehen, wie Methoden, Schnittstellen und konkrete Typen in go funktionieren.

Zum Beispiel hier.

Mein Code ist:

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}
Nach dem Login kopieren

Also implementiert eine Schnittstelle i.

Im Kundencode:

i := somefunction(....) // i is of type I
i.MyMethod(....)
Nach dem Login kopieren

Wie bekomme ich eine Referenz zu einem von i?

Lösung

  • Eine Reihe von Methodensignaturen wird in einem Schnittstellentyp gespeichert. Jede Implementierung einer Methode , die in einer Schnittstelle definiert ist, kann als ihr Wert gespeichert werden.

  • Wenn eine Variable mithilfe eines Schnittstellentyps definiert ist, kann auf Methoden zugegriffen werden, die in der Schnittstelle definiert sind, und auf andere Methoden , die mit dem implementierten Typ verknüpft sind kann nicht zugegriffen werden .

Schnittstelle:

type i interface {
    value() string
}
Nach dem Login kopieren

Umsetzung:

type a string

func(a a) value() string {
    return string(a)
}

func (a a) type() string {
 return  reflect.typeof(a).name()
}

Nach dem Login kopieren

Im Kundencode:

    // define a variable with the type of i.
    var a i = a("a") 

    // method value() defined in the i interface can be
    // called.
    value := a.value()

     // method type() can not be called, because it is not defined in the interface.
    typ := a.type()

Nach dem Login kopieren

Hinweis: Wenn Sie die Pointer ReceiverImplementierungsmethode wie unten gezeigt verwenden. Sie müssen den implementierten Zeiger i zuweisen.

Umsetzung:

type a string
func(a *a) value() string {
  return string(a)
}
Nach dem Login kopieren

Im Kundencode:

 a := A("a")
 var i I = &a 
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo erhalten Sie einen Verweis auf einen konkreten Typ aus einem Verweis auf eine Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
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