这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。
课堂笔记
本课重点内容
01. 语言进阶——从并发编程视角了解Go高性能的本质
Go并发优势
Go语言最大的特点就是从语言层面支持并发,开发者不用担心并发的底层逻辑、内存管理,只需要编写好自己的业务逻辑即可。Go语言也提供了十分强大的垃圾回收机制。
并发VS并行
并发:多线程程序在一个核的cpu上运行。
并行:多线程程序在多个核的cpu上运行。
Goroutine
goroutine是Go并发设计的核心,也叫协程,它比线程更加轻量,因此可以同时运行成千上万个并发任务。Go语言内部已经实现了goroutine之间的内存共享,它比线程更加易用、高效和轻便。
CSP(Communicating Sequential Processes通信顺序进程)
Go提倡通过通信共享内存。
Channel
make(chan 元素类型, [缓冲大小])
无缓冲通道 make(chan int)
有缓冲通道 make(chan int,2)
并发安全Lock
lock sync.Mutex
lock.Lock()
lock.Unlock()
WaitGroup
Add(delta int) 计数器+delta
Done() 计数器-1
Wait() 主协程阻塞直到计数器为0
02. 依赖管理——Go语言依赖管理的演进路线
GOPATH->Go Vendor->Go Module
03. 测试——单元测试实践
规则
所有测试文件以_test.go结尾
func TestXxx(*testing.T)
初始化逻辑放到TestMain中
04. 项目实战
需求描述
展示话题(标题,文字描述)和回帖列表
暂不考虑前端页面实现,仅仅实现一个本地web服务
话题和回帖数据用文件存储
分层结构
数据层:数据Model,外部数据的增删改查
逻辑层:业务Entity,处理核心业务逻辑输出
视图层:视图view,处理和外部交互逻辑