首頁 > 後端開發 > Golang > 為什麼我無法在 Go 中呼叫命名類型的方法,嵌入如何解決這個問題?

為什麼我無法在 Go 中呼叫命名類型的方法,嵌入如何解決這個問題?

DDD
發布: 2024-12-14 16:00:19
原創
383 人瀏覽過

Why Can't I Call Methods on a Named Type in Go, and How Can Embedding Solve This?

在命名類型上呼叫方法

在 Go 中,命名類型是從現有資料型別建立的新資料型別。這對於向基礎類型添加自訂方法非常有用,例如在解組 JSON 資料的情況下。但是,當以下面所示的方式建立命名類型時,它會失去呼叫基礎類型的方法的能力:

type StartTime time.Time
登入後複製

例如,嘗試在myStartTime 上呼叫Date() 方法會導致錯誤:myStartTime .Date undefined(類型my_package.StartTime沒有欄位或方法Date)。

解決方案:擁抱嵌入

要解決此問題並保留底層類型的原始方法,可以使用嵌入。透過嵌入基礎類型,命名類型繼承其所有方法和欄位。這個過程如下所示:

type StartTime struct {
    time.Time
}
登入後複製

在這種情況下,time.Time 的所有方法和欄位都被「提升」並且可以透過命名類型存取。因此,在 StartTime 類型的變數 s 上呼叫 Date() 不再引發錯誤。

範例展示:

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}
登入後複製

此程式碼產生以下內容輸出:

2009 November 10
登入後複製

透過使用嵌入,您可以輕鬆擴展現有類型的功能同時保留其原有功能。

以上是為什麼我無法在 Go 中呼叫命名類型的方法,嵌入如何解決這個問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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