[go101笔记]基本概念

简介

看到一本还不错的书,go101,觉得不错,整理一下,做个笔记

声明

本文大部分内容来自go101,由本文作者翻译,摘取整理。
想看英文原版的请自行跳转

正文

类型

Go支持以下内置基本类型:

  • 一种内置布尔类型:bool
  • 十一种内置整数类型:int8uint8int16uint16int32uint32int64uint64intuintuintptr
  • 两种内置浮点数类型:float32float64
  • 两种内置复数类型:complex64complex128
  • 一种内置字符串类型:string

Go还支持两种别名类型

  • byteuint8的别名
  • runeint32的别名

intuint值取决于操作系统,32位系统int就是4字节,64位系统int就是8字节
complex64实部和虚部都是float32complex128实部和虚部都是float64

常量

常量声明中的自动完成

以下代码

1
2
3
4
5
6
7
8
9
const (
X float32 = 3.14
Y // 只能有一个标识符
Z // 只能有一个标识符

A, B = "Go", "language"
C, _
// 需要“_”进行占位
)

等同于

1
2
3
4
5
6
7
8
const (
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
29
package 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
11
const (
Failed = iota - 1 // == -1
Unknown // == 0
Succeeded // == 1
)

const (
Readable = 1 << iota // == 1
Writable // == 2
Executable // == 4
)

变量

包级变量的依赖关系影响其初始化顺序

对于以下示例

1
2
var x, y = a+1, 5         // 8 5
var a, b, c = b+1, c+1, y // 7 6 5 8

包级变量的初始化顺序是y = 5c = yb = c+1a = b+1x = a+1

您的支持将鼓励我继续创作!