Maison >développement back-end >Golang >Comment puis-je accéder aux méthodes d'un type intégré dans Go lorsque la surcharge de méthodes est utilisée ?

Comment puis-je accéder aux méthodes d'un type intégré dans Go lorsque la surcharge de méthodes est utilisée ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-05 18:35:15251parcourir

How can I access methods of an embedded type in Go when Method Overloading is used?

Surcharge de méthodes et accès aux types intégrés dans Go

Dans Go, la surcharge de méthodes permet la définition de plusieurs méthodes portant le même nom mais différentes paramètres ou types de retour. Lorsqu'une struct Go contient une autre struct comme type embarqué, cela se pose la question de l'accès aux méthodes du type embarqué.

Accéder aux méthodes de type embarqué

Pour accéder au méthodes d'un type incorporé :

  1. Déclarez le type incorporé dans la structure parent.
  2. Utilisez le nom du type incorporé en tant que membre de la structure parent pour accéder à ses méthodes.

Exemple

Considérez le code suivant :

package main

import "fmt"

type Human struct {
    name string
    age int
    phone string
}

type Employee struct {
    Human 
    company string
}

func (h *Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

func (e *Employee) SayHi() {
    fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,
        e.company, e.phone)
}

func main() {
    sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"}
    sam.SayHi() // calls Employee.SayHi
    sam.Human.SayHi() // calls Human.SayHi
}

Dans cet exemple :

  • La structure Human est intégrée dans la structure Employee struct.
  • La structure parent (Employé) et la structure intégrée (Humain) ont toutes deux une méthode SayHi().
  • Pour accéder à la méthode SayHi() de la structure Human, nous utilisons sam. Human.SayHi().

Surcharge de méthode et intégration Types

Lorsque la méthode d'un type incorporé est surchargée, la structure enfant a accès à toutes les surcharges. Par exemple :

package main

import "fmt"

type A struct {
    SayHi func(string)
}

type B struct {
    A
}

func main() {
    a := B{}
    
    a.SayHi = func(s string) {
        fmt.Println("Hello", s)
    }
    
    a.SayHi("World") // prints "Hello World"
}

Dans cet exemple :

  • La structure A a une méthode nommée SayHi qui prend un paramètre de chaîne.
  • La structure B intègre A et a donc accès à la méthode SayHi de A.
  • On peut attribuer une nouvelle fonction à la méthode SayHi de B, surchargeant l'originale Méthode SayHi.

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:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn