在命名類型上呼叫方法
在 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中文網其他相關文章!