Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah saya boleh mengakses kaedah jenis terbenam dalam Go apabila Kaedah Lebih Muatan digunakan?

Bagaimanakah saya boleh mengakses kaedah jenis terbenam dalam Go apabila Kaedah Lebih Muatan digunakan?

Linda Hamilton
Linda Hamiltonasal
2024-12-05 18:35:15265semak imbas

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

Pemuatan Terlebih Kaedah dan Akses Jenis Terbenam dalam Go

In Go, Pemuatan Terlebih Kaedah membenarkan takrifan berbilang kaedah dengan nama yang sama tetapi berbeza parameter atau jenis pulangan. Apabila struct Go mengandungi struct lain sebagai jenis terbenam, ia menimbulkan persoalan untuk mengakses kaedah jenis terbenam.

Akses Kaedah Jenis Terbenam

Untuk mengakses kaedah jenis terbenam:

  1. Isytiharkan jenis terbenam dalam induk struct.
  2. Gunakan nama jenis terbenam sebagai ahli struct induk untuk mengakses kaedahnya.

Contoh

Pertimbangkan kod berikut:

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
}

Dalam ini contoh:

  • Struktur Manusia dibenamkan ke dalam struct Pekerja.
  • Struktur induk (Pekerja) dan struct terbenam (Manusia) kedua-duanya mempunyai kaedah SayHi().
  • Untuk mengakses kaedah SayHi() struct Manusia, kami menggunakan sam.Human.SayHi().

Kaedah Lebih Muatan dan Jenis Terbenam

Apabila kaedah jenis terbenam dibebankan, struct anak mempunyai akses kepada semua lebihan beban . Contohnya:

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

Dalam contoh ini:

  • Struktur A mempunyai kaedah bernama SayHi yang mengambil parameter rentetan.
  • Struktur B membenamkan A dan oleh itu mempunyai akses kepada kaedah SayHi A.
  • Kami boleh menetapkan fungsi baharu kepada kaedah SayHi B, melebihkan kaedah SayHi asal.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses kaedah jenis terbenam dalam Go apabila Kaedah Lebih Muatan digunakan?. 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