这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
一、本堂课重点内容
本堂课的知识要点有哪些?
- Go语言类型
二、详细知识点介绍
本堂课介绍了哪些知识点?
Go语言类型
-
Go语言规定,已命名的类型总是不同的,就像
int与int8不是同一种类型一样。匿名类型也是彼此不同的。 -
如果两个类型的底层基础类型的字面量是相同的,则这两个类型就是同类型。如果底层类型的字面量及其元素均相同,则两个类型是相同的。相同类型具体说来如下:
①具有相同元素类型及长度的两个数组类型是相同的;
②具有相同元素类型的两个切片类型是相同的;
③具有相同基础类型的两个指针类型是相同的;
④具有相同键及值类型的两个映射类型是相同的;
⑤具有相同元素类型及方向的两个通道类型是相同的;
⑥具有相同的字段名称,字段类型,字段顺序,字段标记的两个结构体类型是相同的,匿名字段视为同名。来自不同包的未导出字段名称总是不同的;
⑦具有相同的参数个数,返回值个数以及每个参数对应的类型均相同,这样的函数类型是相同的;
⑧如果两个接口类型具有相同方法集且每个方法名称及签名均相同,则它们是相同的。 而来自不同包的未导出方法名称总是不同的。方法集中方法的顺序无关紧要。
-
别名通常用以下语法格式声明:
type (
nodeList = []*Node // nodeList 和 []*Node 为相同类型
Polar = polar // Polar 和 polar 为相同类型
)
-
别名声明就是将标识符绑定到给定类型。
-
别名与其原类型等价,在标识符的作用范围内,它充当该类型的别名。
-
类型定义就是采用关键字
type基于已有的类型创建一个新的,不同的类型,其具有与给定类型相同的基础类型和操作,并将新的标识符绑定到该基础类型。 -
新类型称为已定义类型,它与任何其他类型不同,包括创建它的类型。
-
类型定义的语法格式如下:
type ( Point struct{ x, y float64 } // Point 和 struct{ x, y float64 } 为不同类型 polar Point // polar 和 Point 表示不同的类型 ) -
如果满足下列条件之一,则值x可赋予类型为T的变量:
①值
x的类型与T相同。②值
x的类型V和T具有相同的基础类型,并且V或T中的至少一个不是已定义的类型(即不是type definition类型)。③
T是接口类型,而值x的类型实现了T。④如果
x是双向通道的值,而T是通道类型,x的类型V和T具有相同的元素类型,并且V或T中的至少一个不是已定义的类型。⑤如果
x是预先声明的标识符nil,T是指针,函数,切片,映射,通道或接口类型。⑥如果
x是一个无类型常量,可由类型T的值表示。 -
如果满足下列条件之一,则常量
x可由类型T的值表示:①
x是由T确定的值集合。②
T是浮点类型,x可以舍入到T的精度而不会溢出。舍入使用IEEE754舍入到偶数规则,但IEEE负零进一步简化为无符号零。请注意,常量值永远不会导致IEEE负零,NaN或无穷大。③
T是复数类型,x的组件real(x)和imag(x)可由T的组件类型(float32或float64)的值表示。