Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah saya Mengakses Kaedah Struktur Asas dalam Go Apabila Subtaip?

Bolehkah saya Mengakses Kaedah Struktur Asas dalam Go Apabila Subtaip?

Barbara Streisand
Barbara Streisandasal
2024-11-12 02:43:01829semak imbas

Can I Access Base Struct Methods in Go When Subtyping?

Kaedah Lebih Muatan dan Subtaip dalam struct Go

Pertimbangkan kod Go berikut:

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

Kod ini menunjukkan kaedah terlebih beban, di mana kaedah SayHi ditakrifkan dalam kedua-dua struktur Manusia dan Pekerja. Apabila kaedah digunakan pada pembolehubah jenis Pekerja, kaedah dalam struct Pekerja dipanggil.

Mengakses Kaedah Struktur Asas

Seseorang mungkin tertanya-tanya sama ada ia mungkin untuk menggunakan kaedah SayHi yang ditakrifkan dalam struct Manusia pada contoh Pekerja. Dalam Go, mengakses kaedah struct asas adalah mudah. Untuk melakukan ini, rujuk kepada jenis terbenam menggunakan nama ahli struct, seperti yang ditunjukkan di bawah:

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

Kod ini menunjukkan bahawa mengakses kaedah struct terbenam boleh dilakukan dengan lancar. Outputnya ialah:

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

Atas ialah kandungan terperinci Bolehkah saya Mengakses Kaedah Struktur Asas dalam Go Apabila Subtaip?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn