Heim >Backend-Entwicklung >Golang >Kann ich bei der Untertypisierung auf Basisstrukturmethoden in Go zugreifen?

Kann ich bei der Untertypisierung auf Basisstrukturmethoden in Go zugreifen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 02:43:01911Durchsuche

Can I Access Base Struct Methods in Go When Subtyping?

Methodenüberladung und Subtypisierung in Go-Strukturen

Betrachten Sie den folgenden Go-Code:

package main

import "fmt"

type Human struct {
    name string
    age int
    phone string
}


type Employee struct {
    Human // Embedding
    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()
}

Dieser Code demonstriert die Methode Überladung, wobei die SayHi-Methode sowohl in der Human- als auch in der Employee-Struktur definiert ist. Wenn eine Methode für eine Variable vom Typ „Employee“ aufgerufen wird, wird die Methode in der Employee-Struktur aufgerufen.

Zugriff auf Basisstrukturmethoden

Man fragt sich vielleicht, ob das möglich ist um die in der Human-Struktur definierte SayHi-Methode für eine Employee-Instanz aufzurufen. In Go ist der Zugriff auf die Methoden der Basisstruktur unkompliziert. Verweisen Sie dazu auf den eingebetteten Typ mithilfe des Namens des Strukturmitglieds, wie unten gezeigt:

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

Dieser Code zeigt, dass der Zugriff auf die Methode der eingebetteten Struktur nahtlos erfolgen kann. Die Ausgabe wäre:

Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX
Hi, I am Sam you can call me on 111-888-XXXX

Das obige ist der detaillierte Inhalt vonKann ich bei der Untertypisierung auf Basisstrukturmethoden in Go zugreifen?. 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