Golang type 類型別名和類型定義

Golang語言中存在一個關鍵字type,type又有兩種使用方式,一種是類型別名,一種是類型定義,是不是熟悉的C語言(define和typedef)味道?

  • 類型定義
type Student struct {
  name String
  age int
}

type I int
  • 類型別名
type Sdt = Student
type I = int

他們之間有什么區(qū)別呢?區(qū)別就是類型定義是完全定義了一種新的類型,而類型別名只是給現(xiàn)有的類型取了一個別名alias

type I int
type D = int

拿上面的例子來說,I是一種全新的類型,和現(xiàn)有的int類型完全不一樣,即I類型的指針不能只想int類型的指針,反之亦然,類似于C語言中的typedef。而D只是int的一個別名,相當于編譯期會預處理替換為int,類似于C語言中的#define。
可能上面的例子太特殊了,看下面的例子

type Student struct {
  name String
  age int
}

type Teacher Student

相當于定義了一個新的Teacher類型,和下面的代碼是等價的。雖然兩個類型內存布局完全一樣,但是從概念上來說,他們是完全不同的兩個類型,不能相互兼容。

type Teacher struct {
  name String
  age int
}

類型別名這個功能非常有用,鑒于go中有些類型寫起來非常繁瑣,比如json相關的操作中,經(jīng)常用到map[string]interface {}這種類型,寫起來是不是很繁瑣,沒關系,給它起個簡單的別名!這樣用起來爽多了。

type strMap2Any = map[string]interface {}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容