首頁 > 後端開發 > Golang > Go 中的型別別名和型別定義何時在方法繼承上有所不同?

Go 中的型別別名和型別定義何時在方法繼承上有所不同?

Linda Hamilton
發布: 2024-11-19 18:51:03
原創
497 人瀏覽過

When Do Type Aliases and Type Definitions in Go Differ in Method Inheritance?

類型別名與類型定義

在 Go 中,類型聲明可以分為兩類:別名聲明和類型定義。理解這種差異對於理解類型別名(如 durWithoutMethods 和 SameAsDuration)的奇怪行為至關重要。

別名宣告

別名宣告只是為現有型別建立一個新識別碼。這個新標識符可以與原始名稱互換。例如,輸入 dur = time.Duration 會建立 time.Duration 的別名。使用 dur 和 time.Duration 宣告變數會產生相同的行為。

型別定義

相反,型別定義會建立新型別。它們從基礎類型中剝離了所有方法。這表示如果定義一個型別 type x struct { y time.Duration },x 將不會繼承任何 time.Duration 的方法。這是因為 time.Duration 是原始型別,沒有附加方法的型別。

將此應用於範例

  • durWithMethods dur: 此別名聲明會建立新型別 durWithMethods,其基礎型別為 dur。由於dur 嵌入了time.Duration,dur 和durWithMethods 繼承了Duration.String().
  • durWithoutMethods time.Duration: 此類型定義建立了一個獨立於time.Duration 的新類型durWithoutMethods。因此,durWithoutMethods 不會繼承 Duration.String()。
  • type sameAsDuration = time.Duration: 此型別別名宣告表示 sameAsDuration 和 time.Duration 是相同型別。因此,sameAsDuration也有String()方法。

以上是Go 中的型別別名和型別定義何時在方法繼承上有所不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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