Heim >Backend-Entwicklung >Golang >Wie kann ich in Go auf Methoden eines eingebetteten Typs zugreifen, wenn Methodenüberladung verwendet wird?

Wie kann ich in Go auf Methoden eines eingebetteten Typs zugreifen, wenn Methodenüberladung verwendet wird?

Linda Hamilton
Linda HamiltonOriginal
2024-12-05 18:35:15253Durchsuche

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

Methodenüberladung und Zugriff auf eingebettete Typen in Go

In Go ermöglicht Methodenüberladung die Definition mehrerer Methoden mit demselben Namen, aber unterschiedlichen Namen Parameter oder Rückgabetypen. Wenn eine Go-Struktur eine andere Struktur als eingebetteten Typ enthält, stellt sich die Frage nach dem Zugriff auf die Methoden des eingebetteten Typs.

Auf eingebettete Typmethoden zugreifen

Um auf die zuzugreifen Methoden eines eingebetteten Typs:

  1. Deklarieren Sie den eingebetteten Typ innerhalb der übergeordneten Struktur.
  2. Verwenden der Name des eingebetteten Typs als Mitglied der übergeordneten Struktur, um auf seine Methoden zuzugreifen.

Beispiel

Betrachten Sie den folgenden Code:

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
}

In diesem Beispiel:

  • Die menschliche Struktur ist in den Mitarbeiter eingebettet struct.
  • Die übergeordnete Struktur (Employee) und die eingebettete Struktur (Human) verfügen beide über eine SayHi()-Methode.
  • Um auf die SayHi()-Methode der Human-Struktur zuzugreifen, verwenden wir sam. Human.SayHi().

Methodenüberladung und Einbettung Typen

Wenn die Methode eines eingebetteten Typs überladen ist, hat die untergeordnete Struktur Zugriff auf alle Überladungen. Zum Beispiel:

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"
}

In diesem Beispiel:

  • Die A-Struktur hat eine Methode namens SayHi, die einen String-Parameter akzeptiert.
  • Die B-Struktur bettet A ein und hat daher Zugriff auf die SayHi-Methode von A.
  • Wir können der SayHi-Methode von B eine neue Funktion zuweisen und so das ursprüngliche SayHi überladen Methode.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go auf Methoden eines eingebetteten Typs zugreifen, wenn Methodenüberladung verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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