博客
关于我
《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}

其中,nameemail字段是公开的,可直接访问。

结论

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

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

你可能感兴趣的文章
npm error Missing script: “server“npm errornpm error Did you mean this?npm error npm run serve
查看>>
npm error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。要解决此问题,1) 安装
查看>>
npm install CERT_HAS_EXPIRED解决方法
查看>>
npm install digital envelope routines::unsupported解决方法
查看>>
npm install 卡着不动的解决方法
查看>>
npm install 报错 EEXIST File exists 的解决方法
查看>>
npm install 报错 ERR_SOCKET_TIMEOUT 的解决方法
查看>>
npm install 报错 Failed to connect to github.com port 443 的解决方法
查看>>
npm install 报错 fatal: unable to connect to github.com 的解决方法
查看>>
npm install 报错 no such file or directory 的解决方法
查看>>
npm install 权限问题
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm install无法生成node_modules的解决方法
查看>>
npm install的--save和--save-dev使用说明
查看>>
npm node pm2相关问题
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build报Cannot find module错误的解决方法
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm run dev 和npm dev、npm run start和npm start、npm run serve和npm serve等的区别
查看>>
npm run dev 报错PS ‘vite‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
查看>>