在Go語言裏,能夠用type
聲明自定義的各類類型。在這些自定義的類型中,有一種被叫作別名類型
。函數
舉個例子:ui
type MyString = string
這句代碼的意思是:MyString是string類型的別名類型。顧名思義,別名類型和源類型的區別僅僅在名稱不一樣。code
別名類型主要是爲了重構代碼
而存在的。接口
Go語言內建的基本類型中就存在2個別名類型。byte是uint8的別名類型。rune是int32的別名類型。string
若是這樣聲明類型MyStringclass
type MyString string //注意這裏沒有 = 符號
這時候,MyString和string就是2個不一樣的類型了。這裏的MyString是一個新的類型,不一樣於其餘任何類型。這種方式叫作對類型的自定義
。string能夠被稱爲MyString的潛在類型。潛在類型的含義是:某個類型在本質上是哪一個類型或者哪一個類型的集合。變量
潛在類型相同的不一樣類型的值之間是能夠進行類型轉換的。重構
對於大型的代碼庫來講,可以重構其總體結構是很是重要的,包括修改某些 API 所屬的包。大型重構應該支持一個過渡期:從舊位置和新位置得到的 API 都應該是可用的,並且能夠混合使用這些 API 的引用。Go 已經爲常量、函數或變量的重構提供了可行的機制,可是並不支持類型。類型別名提供了一種機制,它可使得 oldpkg.OldType 和 newpkg.NewType 是相同的,而且引用舊名稱的代碼與引用新名稱的代碼能夠互相操做。數據類型
考慮將一個類型從一個包移動到另外一個包中的狀況,好比從 oldpkg.OldType 到 newpkg.NewType。能夠在包 oldpkg 中指定一個新類型的別名 type OldType = newpkg.NewType,這樣之前的代碼都無需修改。引用
以上,整理自《極客時間Go語言專欄》