上篇文章中详细介绍了 Go 的基础语言,指出了 Go 和其他主流的编程语言的差异性,比较侧重于语法细节,相信只要稍加记忆就能轻松从已有的编程语言切换到 Go 语言的编程习惯中,尽管这种切换可能并不是特别顺畅,但多加练习尤其是多多试错,总是可以慢慢感受 Go 语言之美!
在学习 Go 的内建容器前,同样的,我们先简单回顾一下 Go 的基本语言,温度而知新可以为师矣!
上节知识回顾
如需了解详情,请于微信公众号[雪之梦技术驿站]内查看 go 学习笔记之值得特别关注的基础语法有哪些 文章,觉得有用的话,顺手转发一下呗!
内建类型种类
- bool
布尔类型,可选 true|false,默认初始化零值 false .
- (u)int ,(u)int8 , (u)int16, (u)int32,(u)int64,uintptr
2^0=1,2^1=2 ,2^2=4 个字节长度的整型,包括有符号整型和无符号整型以及 uintptr 类型的指针类型,默认初始化零值 0 .
- byte(uint8) ,rune(int32),string
byte 是最基础字节类型,是 uint8 类型的别名,而 rune 是 Go 中的字符类型,是 int32 的别名.最常用的字符串类型 string 应该不用介绍了吧?
- float32 ,float64 ,complex64 ,complex128
只有 float 类型的浮点型,没有 double 类型,同样是以字节长度来区分,complex64 是复数类型,实部和虚部由 float32 类型复合而成,因此写作 complex64 这种形式.
内建类型特点
- 类型转换只有显示转换,不存在任何形式的隐式类型转换
不同变量类型之间不会自动进行隐式类型转换,Go 语言的类型转换只有强制的,只能显示转换.
- 虽然提供指针类型,但指针本身不能进行任何形式的计算.
指针类型的变量不能进行计算,但是可以重新改变内存地址的指向.
- 变量声明后有默认初始化零值,变量零值视具体类型而定
int 类型的变量的初始化零值是 0,string 类型的初始化零值是空字符串,并不是 nil
基本运算符
- 算术运算符没有 ++i 和--i
只有 i++ 和 i-- 这种自增操作,再也不用担心两种方式的差异性了!
- 比较运算符 == 可以比较数组是否相等
当两个数组的维度和数组长度相等时,两个数组可以进行比较,顺序完全一致时,结果为 true,其他情况则是 false .
- 位运算符新增按位清零运算符 &^
其他主流的编程语言虽然没有这种操作符,通过组合命令也可以实现类似功能,但既然提供了按位清零运算符,再也不用自己进行组合使用了!
流程控制语句
- if 条件表达式不需要小括号并支持变量赋值操作
先定义临时变量并根据该变量进行逻辑判断,然后按照不同情况进行分类处理,Go 处理这种临时变量的情况,直接对条件表达式进行增强,这种情况以后会很常见!
- if 条件表达式内定义的变量作用域仅限于当前语句块
条件表达式内定义的变量是为了方便处理不同分支的逻辑,既然是临时变量,出了当前的 if 语句块就无法使用,也变得可以理解.
- switch 语句可以没有 break,除非使用了 fallthrough
switch 语句的多个 case 结尾处可以没有 break,系统会自动进行 break 处理.
- switch 条件表达式不限制为常数或整数
和其他主流的编程语言相比,Go 语言的 switch 条件表达式更加强大,类型也较为宽松.
- switch 条件表达式可以省略,分支逻辑转向 case 语言实现.
省略 switch 条件表达式,多个 case 语言进行分支流程控制,功能效果和多重 if else 一样.
- 省略 switch 条件表达式后,每个 case 条件可以有多个条件,用逗号分隔.
swicth 语句本质上是根据不同条件进行相应的流程控制,每个 case 的条件表达式支持多个,更是增强了流程控制的能力.
- for 循环的条件表达式也不需要小括号,且没有其他形式的循环.
Go 语言只有 for 循环,没有 while 等其他形式的循环.
- for 循环的初始条件,终止条件和自增表达式都可以省略或者同时省略
条件表达式进行