写在前面
几个月前我学习了 Go 语言,在本次青训营学习 Go 相关内容算是一个回顾和补充。本篇内容综合青训营 Go 相关内容和我对 Go 的学习和掌握,写了我 Go 语言基础的总结和感悟。
Go 语言的起源
2007 年,Google 工程师 Rob Pike,Ken Thompson 和 Robert Griesemer 开始设计一门全新的语言,这就是 Go 语言的最初原型。
Go 语言特性
- Go 保证了能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率。
- 引入了自动垃圾回收机制。
- 天然并发:从语言层面支持并发,实现简单。goroutine 轻量级线程,可实现大并发处理,高效利用多核。
- Go 吸收了一些其他语言的优点,如C、Python、JavaScript,也在此基础上进行了一些创造,拥有了一些 GoLang 独特的功能。
基础语法
(这部分是我在学习和使用 GoLang 的过程中感觉需要特别注意的或与其他语言有较大差异的内容。注意:不是语法总结。)
- GoLang 的一大特点是使用包进行项目管理,每一个文件都需要属于一个包,使用 来标识当前文件属于哪一个包,包和文件所述的文件夹名称要对应。这种方式给使用者的直观感受就是清晰简便,不论是在 IDE 中打开 Go 项目还是在 OS 资源管理器中查看项目,都可以快速的分辨出不同功能或模块所在的位置。这里需要注意一点,源文件不能单独存在,即必须属于某个包,这和很多编程语言是不同的。
- GoLang 为了清晰明了,很多功能都只提供了一种实现方式。
- GoLang 提供了很多数据类型,总体分为基本数据类型和派生数据类型。特别注意:GoLang 没有提供自动数据类型转换,我感觉这会提高一些编程复杂度,但是这会让程序更加清晰。
- 基本数据类型
- 数值型
- 整数类型:int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, byte
- 浮点类型:float32, float64(推荐使用,精度高)
- 字符型:没有专门的字符型,使用 byte 存储单个字符。这里是比较独特的,byte 类型是数值型,也就是说在 GoLang 中存储字符是存储相应的 UTF-8 码值(GoLang 使用 UTF-8 编码)。
- 布尔型
- 字符串:需要注意的是 GoLang 中的 string 是无法修改单个字符的,但是依旧可以通过 + 运算符进行多个字符串之间的连接。
- 数值型
- 派生数据类型(个人感觉这部分数据类型极大程度上便利了程序的实现)
- 指针
- 数组
- 结构体
- 管道
- 函数:看做一种数据类型,可以像 JS 那样赋值给一个函数类型的变量,然后可以通过这个变量使用这个函数。
- 管道:感觉非常好用的一种数据类型。在使用多协程时,最好使用管道存储数据,它自带数据安全。
- 切片
- 接口
- map:注意,GoLang 的 map 是完全无序的。
- 基本数据类型