数据类型
- 数值型
- 整数类型:int, int8, int16, int32(rune), int64, uint, uint8(byte), uint16, uint32, uint64
- 根据硬件的类型,int必是32或64之一,除非手动定义为其它
- 一旦定义就不会改变,即使在32位架构上,int64还是int64
- 浮点类型:float32, float64
- 整数类型:int, int8, int16, int32(rune), int64, uint, uint8(byte), uint16, uint32, uint64
- 字符型
- 没有专门的字符型(如char),使用byte保存单个字母或字符,此时存储的是utf-8的数字值
- 布尔型bool
- 字符串string
- go中字符串属于基本数据类型,它们由双引号括起;单引号只能括起一个字符
- 一旦赋值,就不可以修改
- 复数complex128, complex64,写为re+imi,re为实数部分,im为虚数部分,i标记根号-1
- 错误error,默认值为nil,当它不为nil时,说明出错
- 指针pointer
- 数组
- 向函数传递数组时,传的是数组的副本,而不是指针
- 结构体struct,相当于class
- 管道channel
- 函数
- 切片slice
- 可以使用内建函数make创建切片,slice本身不是关键字,可以作为变量名
- slice是一个指向array的指针,是引用类型,这意味着当赋值某个slice到另外一个变量,两个引用会指向同一个array
- 接口interface
map,相当于集合set
在go中,大括号是必须的,即使语句体中只有一条语句,并且左大括号必须与if在同一行
- if和switch支持局部变量的初始化语句,switch中默认包含break
- 控制语句结束于break,continue,goto或者return
- 鼓励减少else的使用,使用error判断并return来代替
- 可以使用标签+break的方式结束指定循环
range返回的值是键值对k和v(如果只想要v,可以将k改为_,表示不使用),如下返回0a,1b,2c,以此循环类推,可以直接对字符串使用,以此更改其中某个字符
list := [] string {"a", "b", "c", "d", "e", "f"}
for k, v := range list {
// 对k和v做想做的事情...
}
打印
print和println是底层的打印函数,主要用来调试
- fmt中的print有各自不同用处
- 在使用Printf打印时,一定要确保占位符正确,否则会出现不可预知的bug,如果不用占位符就不要用Printf
- Println一般只用来换行