输出:

struct { s string; x int }{s:"abc", x:200}

注意:GC 把 uintptr 当成普通整数对象,它⽆法阻⽌ "关联" 对象被回收。

 

1.8 ⾃定义类型

 

可将类型分为命名和未命名两⼤类。命名类型包括 bool、int、string 等,⽽ array、

slice、map 等和具体元素类型、⻓度等有关,属于未命名类型。

具有相同声明的未命名类型被视为同⼀类型。

 

• 具有相同基类型的指针。

• 具有相同元素类型和⻓度的 array。

• 具有相同元素类型的 slice。

• 具有相同键值类型的 map。

• 具有相同元素类型和传送⽅向的 channel。

• 具有相同字段序列 (字段名、类型、标签、顺序) 的匿名 struct。

• 签名相同 (参数和返回值,不包括参数名称) 的 function。

• ⽅法集相同 (⽅法名、⽅法签名相同,和次序⽆关) 的 interface。

 

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

 

 

可⽤ type 在全局或函数内定义新类型。

 

func main() {

type bigint int64

 

var x bigint = 100

println(x)

}