Maison >développement back-end >Golang >Comment obtenir une référence à un type concret à partir d'une référence à une interface

Comment obtenir une référence à un type concret à partir d'une référence à une interface

王林
王林avant
2024-02-09 16:39:14898parcourir

Comment obtenir une référence à un type concret à partir dune référence à une interface

En PHP, une interface est une classe abstraite qui définit un ensemble de méthodes. Nous pouvons garantir qu'une classe a un comportement spécifique en implémentant une interface. Cependant, nous avons parfois besoin d’obtenir une référence à un type concret à partir d’une référence à une interface. Cela peut créer une certaine confusion dans certains cas. Ainsi, cet article va vous montrer comment obtenir une référence à un type concret à partir d’une référence à une interface. Que vous soyez débutant ou développeur expérimenté, cet article vous aidera. Passons ensuite aux choses sérieuses et explorons la solution à ce problème.

Contenu de la question

J'essaie de comprendre comment fonctionnent les méthodes, les interfaces et les types concrets.

Par exemple, ici.

Mon code est :

type i interface {mymethod(....)}
type a struct{i i....} 
func (a *a) mymethod(....) {
}

Donc, une interface implémente i.

Dans le code client :

i := somefunction(....) // i is of type I
i.MyMethod(....)

Comment obtenir une référence à a depuis i ?

Solution

  • Un ensemble de signatures de méthode est stocké dans un type d'interface. Toute implémentation d'une méthode définie dans une interface peut être stockée comme valeur.

  • Si une variable est définie à l'aide d'un type d'interface, peut accéder aux méthodes définies dans l'interface et les autres méthodes associées au type implémenté ne sont pas accessibles .

Interface :

type i interface {
    value() string
}

Mise en œuvre :

type a string

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

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

Dans le code client :

    // 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()

Remarque : Si vous utilisez la méthode d'implémentation Pointer Receiver comme indiqué ci-dessous. Vous devez attribuer le pointeur implémenté à i.

Mise en œuvre :

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

Dans le code client :

 a := A("a")
 var i I = &a 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer