这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:
本堂课主要是讲述了Go的一些进阶知识,依赖管理以及工程实践中的测试部分,这篇笔记将重点介绍课中提到的进阶知识点以及个人经过网上搜索对其的补充。
二、Go的进阶知识:
Goroutine 在视频对Goroutine的介绍中出现了图片错误如下
其中 线程和协程的栈大小级别写反了
Channel
定义只读通道:var 通道实例 <-chan 元素类型
定义只写通道:var 通道实例 chan<- 元素类型
可以使用通道完成锁的功能
package main
import (
"fmt"
"time"
)
func increment(channel chan bool, x *int) {
channel <- true
*x = *x + 1
<-channel
}
func main() {
channel := make(chan bool, 1)
x := 0
for i := 0; i < 10000; i++ {
go increment(channel, &x)
}
time.Sleep(time.Millisecond)
fmt.Println("x =", x)
}
锁 go 里面不仅有Mutex(互斥锁) 也有 RWMutex(读写锁) ,其中读写锁适用于读多写少的场景
三、Go的依赖管理:
现在Go主要是用Go Module
依赖管理三要素:
- 配置文件,描述依赖
- 中心仓库管理依赖
- 本地工具
语义化版本:
${MAJOR}.${MINOR}.${PATCH}
其中不同的major版本是不兼容的API;minor 版本通常是新增函数或功能,向后兼容;patch版本一般是修复bug。
go mod
- init 初始化,创建go.mod文件
- download 下载模块到本地缓存
- tidy 增加需要的依赖,删除不需要的依赖
四、课后个人总结:
今天这节课先是对前面Go的基础知识进行了补充讲述了Go的一些进阶知识,同时也进入到了项目实践的阶段,但由于对于开发相关知识的匮乏以及对GO语言还不是很熟悉,导致我对项目的理解还不够深刻。