Go语言类型 | 青训营笔记

85 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

一、本堂课重点内容

本堂课的知识要点有哪些?

  • Go语言类型

二、详细知识点介绍

本堂课介绍了哪些知识点?

Go语言类型

  1. Go语言规定,已命名的类型总是不同的,就像intint8不是同一种类型一样。匿名类型也是彼此不同的。

  2. 如果两个类型的底层基础类型的字面量是相同的,则这两个类型就是同类型。如果底层类型的字面量及其元素均相同,则两个类型是相同的。相同类型具体说来如下:

    ①具有相同元素类型及长度的两个数组类型是相同的;

    ②具有相同元素类型的两个切片类型是相同的;

    ③具有相同基础类型的两个指针类型是相同的;

    ④具有相同键及值类型的两个映射类型是相同的;

    ⑤具有相同元素类型及方向的两个通道类型是相同的;

    ⑥具有相同的字段名称,字段类型,字段顺序,字段标记的两个结构体类型是相同的,匿名字段视为同名。来自不同包的未导出字段名称总是不同的;

    ⑦具有相同的参数个数,返回值个数以及每个参数对应的类型均相同,这样的函数类型是相同的;

    ⑧如果两个接口类型具有相同方法集且每个方法名称及签名均相同,则它们是相同的。 而来自不同包的未导出方法名称总是不同的。方法集中方法的顺序无关紧要。

  3. 别名通常用以下语法格式声明:

type (
	nodeList = []*Node // nodeList 和 []*Node 为相同类型
	Polar = polar // Polar 和 polar 为相同类型
)
  1. 别名声明就是将标识符绑定到给定类型。

  2. 别名与其原类型等价,在标识符的作用范围内,它充当该类型的别名。

  3. 类型定义就是采用关键字type基于已有的类型创建一个新的,不同的类型,其具有与给定类型相同的基础类型和操作,并将新的标识符绑定到该基础类型。

  4. 新类型称为已定义类型,它与任何其他类型不同,包括创建它的类型。

  5. 类型定义的语法格式如下:

    type (
    	Point struct{ x, y float64 } // Point 和 struct{ x, y float64 } 为不同类型
    	polar Point // polar 和 Point 表示不同的类型
    )
    
  6. 如果满足下列条件之一,则值x可赋予类型为T的变量:

    ①值x的类型与T相同。

    ②值x的类型VT具有相同的基础类型,并且VT中的至少一个不是已定义的类型(即不是type definition类型)。

    T是接口类型,而值x的类型实现了T

    ④如果x是双向通道的值,而T是通道类型,x的类型VT具有相同的元素类型,并且VT中的至少一个不是已定义的类型。

    ⑤如果x是预先声明的标识符nilT是指针,函数,切片,映射,通道或接口类型。

    ⑥如果x是一个无类型常量,可由类型T的值表示。

  7. 如果满足下列条件之一,则常量x可由类型T的值表示:

    x是由T确定的值集合。

    T是浮点类型,x可以舍入到T的精度而不会溢出。舍入使用IEEE754舍入到偶数规则,但IEEE负零进一步简化为无符号零。请注意,常量值永远不会导致IEEE负零,NaN或无穷大。

    T是复数类型,x的组件real(x)imag(x)可由T的组件类型(float32float64)的值表示。

三、引用参考

我参考了哪些外部博客/笔记/文章?