这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
本文不是教程,是自己在训练营中所学的笔记
1.简介
- Golang = C + GC + 协程 + 反射 + 接口
- 自带完整的工具链,不需要 maven、juint
- 支持的目标平台多,支持交叉编译
2. go速通
2.1 开发环境
- 建议使用 Goland
- 家里无矿订阅 Intellij 使用 VSCode
2.2 基础语法
Go 虽说是 C 家族语言,但是好多代码风格差异很大
Go 中大部分控制语句都取消括号包裹,执行的代码块必须使用大括号进行包裹
2.2.1 if
bool 表达式不需要括号包裹
2.2.2 循环
Go 语言中只有一个循环,那就是 for 循环
- 正常 for 循环
for ;; {} - C 中的 while 循环
for 条件{} - 使用
for{}来作为死循环
2.2.3 switch
与 C switch相似,但是不使用 break,C家族中不使用break会导致运行下一个 case,在 go 中我们想要运行下一个 case 在当前case末尾添加语句fallthrough才会执行下一个case
可以使用任何类型,本质上是 if-else 语句的序列,即case可以不适用常量,
不使用 condition 表达式来美化一个 if-else 序列
func main(){
t := time.Now()
switch{
case t.Hour() < 12:
fmt.Println("good morning")
case t.Hour() < 17:
fmt.Println("good afternoon")
drfault:
fmt.Println("good evening")
}
}
2.2.4 数组
就是数组,在现实开发中一般使用切片
2.2.5 切片
实际上更像是数组的引用,只是描述数组的一个部分。改变切片中的一个值,将会改变描述数组的数据,所以其他描述这个数组的切片也会发生改变
2.2.6 map
类似于 java 中的 map,键不可重复,当重复是,其值会被覆盖。
必须使用 make 函数进行创建
m := make[string]int
m["tom"] = 100
CRUD操作:
- C/U:
m[key] = elem - R:
elem = m[key] - D:
delete(m, key)
进行遍历 map 时顺序完全是随机的。
Go 中没有类似与 Java 中的 Set 集合,我们可以只使用map的键来完成类似 Java 中 Set 的使用。
2.2.7 range
相当于创建一个迭代器,可以针对切片和map进行遍历
基本语法:for i, v := range slice {} 。
i 代表索引,v代表值
2.2.8 nil
相当于 Java 中的 null
经典的 if err != nil