复习L1和L2

100 阅读2分钟

L1 Go快速上手

1.简介

高性能,高并发,语法简单,标准库,工具库,跨平台,静态链接,垃圾回收 部署简单学习成本低,内部RPC和HTTP框架的推广

2.入门

3.实战

3.1 猜谜游戏

生成随机数:生成 用时间戳来初始化随机数的种子 fmt输入 一行输入+去掉换行符+转换成数字

3.2 在线字典

抓包 fanyi.caiyunapp.com/ 生成代码 https://curlconverter/#go
找到dict curl bash代码 生成go代码(创建请求,设置请求头,发起请求,读取响应) 生成Requestbody,解析response body oktools.net/json2go 源代码: hi-hi.cn/go

3.3 socks5代理

client socks5 server host

L2 Go语言入门 工程实践

1.语言进阶

并发:多线程程序在一个核的cpu上运行

并行:多线程程序在多个核的cpu上运行

Go可以充分发挥多核优势,高效运行

1.1 Goroutine

线程:用户态,轻量级线程,栈KB级别。

协程:内核态,线程跑多个协程,栈MB级别。

1.2 CSP commuting sequential processes

通道和临界区

提倡通过通信共享内存而不是通过共享内存实现通信

1.3 channel

make(chan 元素类型, [缓冲大小])

无缓冲通道 make(chan int)

有缓冲通道 make(chan int,2)

1.4 并发安全Lock

1.5 WaitGroup

计数器

开启协程+1;执行结束 -1;主协程阻塞直到计数器为0。

小结: Goroutine

channel

sync

2 依赖管理

复杂项目管理依赖库

依赖管理演进

GOPATH --> Go Vender --> Go Module

不同环境(项目)依赖的版本不同

控制依赖库的版本

2.1 GOPATH

环境变量 $GOPATH

项目代码直接依赖src下的代码

go get下载最新版本的包到src目录下

弊端:A和B依赖于某一package的不同版本

问题:无法实现package的多版本控制

2.2 Go Vendor

项目目录下增加vendor文件,所有依赖包副本形式放在 $ProjectRoot/vendor

依赖寻址方式: vendor => GOPATH

通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。

弊端: 无法控制依赖的版本。 更新项目由可能出现依赖冲突,导致编译出错。

2.3 Go Module

通过go.mod文件管理依赖包版本

通过go get/go mod 指令工具管理依赖包

终极目标:定义版本规则和管理项目依赖关系

依赖管理三要素:

1.配置文件,描述依赖 go.mod

2.中心仓库管理依赖库 Proxy

3.本地工具 go get/mod

依赖配置:选择最低的兼容版本

依赖分发 回源 Proxy

3 测试

单元测试

mock测试

基准测试