这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
GO语言入门-工程实践
1.语言进阶-并发编程
01并发和并行
1:多线程程序在一个核的cpu上运行 2:多线程程序在多个核的cpu上运行 Go可以重复发挥多核优势,高效运行
1.1 Goroutine
协程:用户态,轻量级线程,栈KB级别 线程:内核态,线程跑多个协程,栈MB级别
1.2 CSP
两种方式:1. 通过通讯共享内存;2. 通过共享内存实现通信 方式2对性能有影响 提倡通过通信共享内存而不是通过共享内存而实现通信
1.3 Channel
make(chan 元素类型, [缓冲大小]) 无缓冲通道:make(chan int) 有缓冲通道:make(chan int, 2)
1.4 并发安全 Lock
对共享资源进行加锁、解锁处理
1.5 WaitGroup包
方法:
- Add(delta int):计数器+delta
- Done():计数器-1
- Wait():阻塞直到计数器为0
计数器:开启协程+1;执行结束-1;主协程阻塞直到计数器为0
2.依赖管理
2.2 依赖管理三要素
- 配置文件,描述依赖 go.mod
- 中心仓库管理依赖库 Proxy
- 本地工具 go get/mod
2.3 依赖配置
选择最低的兼容版本
go mod:
- init:初始化,创建go.mod文件
- download:下载模块到本地缓存
- tidy:增加需要的依赖,删除不需要的依赖
3.测试
3.1单元测试
包含:输入-> 测试单元 -> 输出 校对 保证质量、提升效率 规则:
- 所有测试文件以_test.go结尾
- 测试函数命名规范:func TestXxx(*testing.T)
- 初始化逻辑放到TestMain中
3.2单元测试-依赖
外部依赖 => 稳定&幂等
3.3单元测试-文件处理
3.4单元测试-Mock
monkey:github.com/bouk/monkey 快速Mock函数:
- 为一个函数打桩
- 为一个方法打桩
4.项目实战
社区话题页面
- 展示话题(标题,文字描述)和回帖列表
- 暂不考虑前端页面实现,仅仅实现一个本地web服务
- 话题和回帖数据用文件存储
需求用例
浏览消费用户:Topic、PostList
分层结构
- 数据层:数据Model,外部数据的增删改查
- 逻辑层:业务Entity,处理核心业务逻辑输出
- 视图层:视图view,处理和外部的交互逻辑
组件工具
Gin高性能go web框架: github.com/gin-gonic/g…
Go Mod go mod init go get gopkg.in/gin-gonic/gin.v1@v1.3.0
总结
知识点很多,也有项目实战,收获很多