1. 程式人生 > >golang 自定義型別

golang 自定義型別

1.8 ⾃自定義型別
可將型別分為命名和未命名兩⼤大類。命名型別包括 bool、int、string 等,⽽而 array、

slice、map 等和具體元素型別、⻓長度等有關,屬於未命名型別。 具有相同宣告的未命名型別被視為同⼀一型別。

• 具有相同基型別的指標。
• 具有相同元素型別和⻓長度的 array。
• 具有相同元素型別的 slice。
• 具有相同鍵值型別的 map。
• 具有相同元素型別和傳送⽅方向的 channel。
• 具有相同欄位序列 (欄位名、型別、標籤、順序) 的匿名 struct。 • 簽名相同 (引數和返回值,不包括引數名稱) 的 function。
• ⽅方法集相同 (⽅方法名、⽅方法簽名相同,和次序⽆無關) 的 interface。

可⽤用 type 在全域性或函式內定義新型別。

var a struct { x int `a` }
var b struct { x int `ab` }

// cannot use a (type struct { x int "a" }) as type struct { x int "ab" } in assignment b=a

func main() {
    type bigint int64
    var x bigint = 100

println(x) }

 

 

新型別不是原型別的別名,除擁有相同資料儲存結構外,它們之間沒有任何關係,不會持 有原型別任何資訊。除⾮非⺫⽬目標型別是未命名型別,否則必須顯式轉換。

Go 學習筆記, 第 4 版

x := 1234
var b bigint = bigint(x) // 必須顯式轉換,除⾮非是常量。 var b2 int64 = int64(b)

var s myslice = []int{1, 2, 3} // 未命名型別,隱式轉換。 var s2 []int = s