首頁 > 後端開發 > Golang > 使用方法重載時如何存取 Go 中嵌入類型的方法?

使用方法重載時如何存取 Go 中嵌入類型的方法?

Linda Hamilton
發布: 2024-12-05 18:35:15
原創
254 人瀏覽過

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

Go 中的方法重載和嵌入式類型存取

Go 中,方法重載允許定義多個同名但不同的方法參數或傳回類型。當 Go 結構體包含另一個結構體作為嵌入類型時,就會產生存取嵌入類型方法的問題。

存取嵌入類型方法

存取嵌入類型的方法:

  1. 在父級中聲明嵌入類型struct。
  2. 使用嵌入類型的名稱作為父結構體的成員來存取其方法。

範例

考慮以下程式碼:

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
}
登入後複製

在此範例:

  • 在此範例:
  • 體嵌入到Employee 結構體中。

父結構體 (Employee) 和嵌入結構體 (Human) 都有一個 SayHi() 方法。 要存取Human 結構體的SayHi() 方法,我們使用sam.Human.SayHi().

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"
}
登入後複製
方法重載和嵌入類型

    當嵌入類型的方法被重載時,子結構可以存取所有重載。例如:
  • 在此範例中:
  • A 結構體有一個名為 SayHi 的方法,該方法採用字串參數。
B 結構體嵌入 A因此可以存取 A 的 SayHi 方法。 我們可以為 A 的 SayHi 方法分配一個新函數B、重載原來的SayHi方法。

以上是使用方法重載時如何存取 Go 中嵌入類型的方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板