博客
关于我
《go in action》第5章(Go语言的类型系统)读书笔记
阅读量:680 次
发布时间:2019-03-17

本文共 1460 字,大约阅读时间需要 4 分钟。

Go语言类型系统概述

Go语言的类型系统是其核心机制之一,提供了强大的静态类型安全功能。通过本文,我们将深入探讨Go语言中的各种类型及其特性,包括用户定义类型、方法、接口、嵌入类型以及公开或未公开标识符等。

5.1 用户定义的类型

在Go语言中,用户可以定义自己的结构体类型。与其他语言不同,Go语言不允许使用字段名创建结构体类型的值。结构体值的初始化顺序至关重要,必须严格按照字段在定义时的顺序进行赋值。

示例

type user struct {    name  string    age   int    email string}lisa := user{"Lisa", 20, "lisa@email.com"}

每个结构体值都是独立拷贝,修改一个不影响其他。

类型兼容性

尽管不同类型可以相互兼容,但它们之间不会自动进行隐式转换。例如:

type Duration int64func main() {    var dur Duration    dur = int64(100)  // 会导致编译错误}

这是因为Duration类型声明使用了int64的值,但编译器无法将其与Duration混淆,因为它们属于完全不同的类型。

5.2 方法

在Go语言中,函数的接收者决定了方法的类型。接收者可以是值接收者或指针接收者。

值接收者

使用值接收者时,函数会创建接收者的拷贝进行调用。方法会被赋予与接收者类型相同的方法集合。

指针接收者

使用指针接收者时,函数会直接操作实际的值。方法只有一种形式,因为它只关联到指针接收者的类型。

示例

func main() {    var dur = make(map[string]int)   dur["age"] = 30}

此处,dur是一个指针接收者,拥有一个底层的map数据结构。

5.3 类型的本质

Go语言中的类型分为内置类型、引用类型和用户定义的结构体。

5.3.1 内置类型

内置类型是Go语言内置的原始类型,包括数值类型、字符类型和布尔类型。这些类型的值在操作时会不断复制,避免共享。

5.3.2 引用类型

引用类型包括切片、映射、通道和接口。当创建引用类型变量时,系统会自动创建一个标头值,包含底层数据结构的指针。引用类型的字段确保了独立管理底层数据。

5.3.3 结构类型

结构体可以是值接收者或指针接收者,需根据其本质选择方法接收者的类型。非原始类型应使用指针接收者。

5.4 接口

接口定义了一组与类型相关联的行为,以实现多态功能。接口方法由用户定义类型实现。

5.4.2 实现

用户定义类型可以实现接口,通过多态调用 方法。notify方法的例子展示了接口实现的机制。

5.4.3 方法集

接口的方法集决定了哪些类型可以实现对应的方法。例如,可通过接收者的类型确定方法的可用性。

5.5 嵌入类型

嵌入类型允许从外部类型访问内部类型的字段和方法。方法的提升规则确保了实现的正确性。

5.6 公开或未公开的标识符

优雅的包命名应与文件夹名称一致。未公开标识符(以小写字母开头)的字段和函数仅在包内部可见。使用New命名工厂函数是Go语言惯例。

示例

type user struct {    name, email string}

其中,name和email字段是公开的,可直接访问。

结论

通过理解Go语言类型系统,我们可以更好地利用其强大的静态类型特性。无论是结构体、方法接收者还是接口,Go语言都提供了灵活且安全的语法选择。

转载地址:http://mcwhz.baihongyu.com/

你可能感兴趣的文章
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>
python判断字符串包含中文_Python 判断字符串是否包含中文
查看>>
python删除第一行_Python 乱码指北:一行删掉根目录
查看>>
Python删除列表元素的三种方法
查看>>
python初步学习-python数据类型-集合(set)
查看>>
python列表生成字典_Python中将字典转换为列表的方法
查看>>
python列表对应元素合并为列表及判断一个列表是几维
查看>>
python列表去重复后按照顺序_从包含不可共元素的Python列表中删除重复元素,同时保留顺序?...
查看>>
python列表前几个_python之列表
查看>>
python列表元组
查看>>
Python列表/元组/字典和集合使用
查看>>
python列表 行列选择_python_pandas_dataframe_行列选择_切片操作
查看>>
python列表
查看>>
python列出当前目录、子目录和文件的脚本
查看>>
python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
查看>>