简介
看到一本还不错的书,go101,觉得不错,整理一下,做个笔记
声明
本文大部分内容来自go101,由本文作者翻译,摘取整理。
想看英文原版的请自行跳转
正文
类型
Go支持以下内置基本类型:
- 一种内置布尔类型:
bool
- 十一种内置整数类型:
int8
,uint8
,int16
,uint16
,int32
,uint32
,int64
,uint64
,int
,uint
,uintptr
- 两种内置浮点数类型:
float32
和float64
- 两种内置复数类型:
complex64
和complex128
- 一种内置字符串类型:
string
Go还支持两种别名类型
byte
:uint8
的别名rune
:int32
的别名
int
和uint
值取决于操作系统,32位系统int
就是4字节,64位系统int
就是8字节
complex64
实部和虚部都是float32
,complex128
实部和虚部都是float64
常量
常量声明中的自动完成
以下代码
1
2
3
4
5
6
7
8
9const (
X float32 = 3.14
Y // 只能有一个标识符
Z // 只能有一个标识符
A, B = "Go", "language"
C, _
// 需要“_”进行占位
)
等同于
1
2
3
4
5
6
7
8const (
X float32 = 3.14
Y float32 = 3.14
Z float32 = 3.14
A, B = "Go", "language"
C, _ = "Go", "language"
)
iota
先放一个示例,了解一下编译时会发生什么
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29package main
func main() {
const (
k = 3 // now, iota == 0
m float32 = iota + 0.1 // m float32 = 1 + 0.1
n // n float32 = 2 + 0.1
p = 9 // now, iota == 3
q = iota * 2 // q = 4 * 2
_ // _ = 5 * 2
r // r = 6 * 2
s, t = iota, iota // s, t = 7, 7
u, v // u, v = 8, 8
_, w // _, w = 9, 9
)
const x = iota // x = 0
const (
y = iota // y = 0
z // z = 1
)
println(m, n) // +1.100000e+000 +2.100000e+000
println(q, r) // 8 12
println(s, t, u, v, w) // 7 7 8 8 9
println(x, y, z) // 0 0 1
}
正式使用时,应该使用的更有意义,如:
1
2
3
4
5
6
7
8
9
10
11const (
Failed = iota - 1 // == -1
Unknown // == 0
Succeeded // == 1
)
const (
Readable = 1 << iota // == 1
Writable // == 2
Executable // == 4
)
变量
包级变量的依赖关系影响其初始化顺序
对于以下示例
1
2var x, y = a+1, 5 // 8 5
var a, b, c = b+1, c+1, y // 7 6 5 8
包级变量的初始化顺序是y = 5
,c = y
,b = c+1
,a = b+1
,x = a+1