Golang語言中存在一個(gè)關(guān)鍵字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)有的類型取了一個(gè)別名alias
type I int
type D = int
拿上面的例子來說瞬雹,I是一種全新的類型,和現(xiàn)有的int類型完全不一樣刽虹,即I類型的指針不能只想int類型的指針酗捌,反之亦然,類似于C語言中的typedef涌哲。而D只是int的一個(gè)別名意敛,相當(dāng)于編譯期會(huì)預(yù)處理替換為int,類似于C語言中的#define膛虫。
可能上面的例子太特殊了草姻,看下面的例子
type Student struct {
name String
age int
}
type Teacher Student
相當(dāng)于定義了一個(gè)新的Teacher類型,和下面的代碼是等價(jià)的稍刀。雖然兩個(gè)類型內(nèi)存布局完全一樣撩独,但是從概念上來說,他們是完全不同的兩個(gè)類型账月,不能相互兼容综膀。
type Teacher struct {
name String
age int
}
類型別名這個(gè)功能非常有用,鑒于go中有些類型寫起來非常繁瑣局齿,比如json相關(guān)的操作中剧劝,經(jīng)常用到map[string]interface {}這種類型,寫起來是不是很繁瑣抓歼,沒關(guān)系讥此,給它起個(gè)簡單的別名!這樣用起來爽多了。
type strMap2Any = map[string]interface {}