Go语言基础语法 | 青训营笔记
笔记都是上课的时候边听边记的,更多只是标记一个知识点,更多具体内容还是得google或者查阅更多资料。比如这里的Go语言语法等,如果以后想要将Go当作主力语言,就应该按照官方给出的资料去仔细看,多敲demo。
个人认为本次训练营对我来说比较适合,报名青训营的初衷也是借此去学习Go和Go web的东西,以下就是我的上课笔记了。
什么是Go
- 高性能,高并发
- 语法简单,学习曲线平缓
- 丰富的标准库
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
字节为什么拥抱Go
- 开始用的python,性能不行
- 早期团队非Java背景
Go入门:我个人是使用的WSL环境,用VSCode和GoLand都可以连接远程,很方便,在Linux下开发遇到问题也很好解决
- 安装GoLang
- IDE
基础语法
- Hello,World
- 变量
- 循环
- 分支
- switch
- 数组
- 切片slice
- map
- range
- 函数(多值返回)
- 指针
- 结构体
- 结构体方法(类比类成员函数)
- 错误处理(多值)
- 字符串操作(标准库函数)
- 字符串格式化
- JSON处理
- 时间处理
- 数字解析(strconv包)
- 进程信息
猜谜游戏(和下面两个项目一样,具体代码可以去看GitHub的项目)
- 设置好随机数种子(可以直接看Go文档)
- 读取用户输入
- 实现游戏循环
在线词典
- 主要是学会如何发送HTTP请求
- 第三方API,调彩云的接口
- copy as curl,用curl来发送请求
- 然后用这个curl命令去生成Go代码
SOCKS5代理
- 实现代理服务器
- 包括SOCKS的原理
Go语言入门-工程实践
-
语言进阶
-
并发编程
-
Goroutine(这个应该算是Go语言的特色,可以着重关注一下实现原理)
- 协程:用户态,轻量级线程
- 线程:内核态,线程跑多个协程
-
通过通信共享内存而不是通过共享内存实现通信CSP(Communicating Sequential Process)
-
Channel——无缓冲和有缓冲
-
对比测试用锁和不用锁,sync.Mutex
-
sleep不优雅,可以使用WaitGroup
-
-
依赖管理
-
背景:站在巨人的肩膀上
-
演进:GOPATH、Go Vendor、Go Module
- 不同环境(项目)依赖的版本不同
- 控制依赖库的版本
- GOPATH:环境变量;所有代码依赖src目录下的代码;弊端:无法实现package得到多版本控制
- Go Vendor:增加一个Vendor目录,增加一个副本,通过每个项目引入一个依赖的副本解决了多个项目需要同一个package的依赖冲突问题
- Go Module:终极目标:定义版本规则和管理项目依赖关系
-
依赖管理三要素:
- 配置文件,描述依赖 go.mod(version、indirect、incompatible、依赖图、依赖分发-回源)
- 中心仓库管理依赖库 Proxy(通过GOPROXY控制服务站点)
- 本地工具 go get/mod
-
-
测试
回归测试——集成测试——单元测试(覆盖率变大,成本却在降低)testing包
-
单元测试
- 依赖:外部依赖——稳定&幂等
-
Mock测试
- monkey包,开源Mock测试包,为一个函数打桩/为一个方法打桩
- 不依赖本地文件
-
基准测试
-
-
项目实战(社区话题页面)
- 项目需求、需求拆解、逻辑设计、代码实现