什麼是類型別名?什麼是潛在類型?

別名類型

在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的潛在類型。潛在類型的含義是:某個類型在本質上是哪一個類型或者哪一個類型的集合。變量

潛在類型相同的不一樣類型的值之間是能夠進行類型轉換的。重構

別名類型在代碼重構過程當中的做用

  1. 名字能夠取的更通俗易懂;
  2. 須要修改數據類型時,只用改定義的那一處地方;
  3. 能夠很方便的添加特有方法,以實現某些接口。

對於大型的代碼庫來講,可以重構其總體結構是很是重要的,包括修改某些 API 所屬的包。大型重構應該支持一個過渡期:從舊位置和新位置得到的 API 都應該是可用的,並且能夠混合使用這些 API 的引用。Go 已經爲常量、函數或變量的重構提供了可行的機制,可是並不支持類型。類型別名提供了一種機制,它可使得 oldpkg.OldType 和 newpkg.NewType 是相同的,而且引用舊名稱的代碼與引用新名稱的代碼能夠互相操做。數據類型

考慮將一個類型從一個包移動到另外一個包中的狀況,好比從 oldpkg.OldType 到 newpkg.NewType。能夠在包 oldpkg 中指定一個新類型的別名 type OldType = newpkg.NewType,這樣之前的代碼都無需修改。引用

以上,整理自《極客時間Go語言專欄》

相關文章
相關標籤/搜索