标识符
关键字(25个)
1 | if for func case struct import |
预定义名字(30+个)
1 | 内建常量: |
变量
变量声明
Go变量声明的三种方式: 1
2
3var a int // 声明一个变量,默认为0
var b = 10 // 声明并初始化,且自动推导类型
c := 20 // 初始化,且自动推导
注意: - :=
定义变量只能在函数内部使用,所以经常用var定义全局变量 - Go对已经声明但未使用的变量会在编译阶段报错:** not used
- Go中的标识符以字母或者下划线开头,大小写敏感 - Go推荐使用驼峰命名
多变量声明
1 | var a,b string |
零值机制
Go变量初始化会自带默认值,不像其他语言为空,下面列出各种数据类型对应的0值: 1
2
3
4
5
6
7
8
9
10
11int 0
int8 0
int32 0
int64 0
uint 0x0
rune 0 //rune的实际类型是 int32
byte 0x0 // byte的实际类型是 uint8
float32 0 //长度为 4 byte
float64 0 //长度为 8 byte
bool false
string ""
变量值互换
1 | m,n = n,m //变量值互换 |
_丢弃变量
_
是个特殊的变量名,任何赋予它的值都会被丢弃。该变量不占用命名空间,也不会分配内存。 1
_, b := 34, 35 //将值`35`赋予`b`,并同时丢弃`34`:
:= 声明的注意事项
下面是正确的代码示例: 1
2in, err := os.Open(file)
out, err := os.Create(file) // 此处的 err其实是赋值
但是如果在第二行赋值的变量名全部和第一行一致,则编译不通过: 1
2in, err := os.Open(file)
in, err := os.Create(file) // 即 := 必须确保至少有一个变量是用于声明
:=
只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么:=
将会在当前词法域重新声明一个新的变量。
常量
常量:在编译阶段就确定下来的值,程序运行时无法改变。
定义方式: 1
2
3
4const A = 3
const PI float32 = 3.1415
const mask = 1 << 3 //常量与表达式
//const Home = os.GetEnv(“HOME”); //错误写法:常量赋值是一个编译期行为,右边的值不能出现在运行时才能得到结果的值。
数据类型
值类型与引用类型
1 | 值类型: |
注意: - 基本数据类型是Go语言实际的原子 - 复合数据类型是由不同的方式组合基本类型构造出来的数据类型,如:数组,slice,map,结构体 - 没有字符型,使用byte来保存单个字母
类型判断: 1
fmt.Printf("%T",a); //输出a的类型
常见格式化输出
1 | %% %字面量 |
类型别名
1 | type bigint int64 //支持使用括号,同时起多个别名 |
多数据分组书写
1 | const( |
关键字iota
关键字iota声明初始值为0,每行递增1:
1 | const ( |