Golang 笔记2【工程实践】 | 青训营笔记

128 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

基础知识

  1. 并发并行 并发指在一个cpu上按照时间片运行,并行指多个线程程序在多核cpu上运行。go可以创建多个协程实现高并发,协程为用户态,切换开销比线程低。协程之间通过管道(先入先出)或者共享内存实现通信。 通过make关键字构建通道(有缓冲,无缓冲)。例,打印数字:一个子协程创建数字,另一个子协程进行计算,最后主协程打印输出;期间不同协程需要将自己的输出放入到不同通道中,再从不同通道中读取数字。可以保证顺序性,并发安全。缓冲通道解决生产者-消费者同步。 开发过程避免对共享内存做并发读写操作(加锁)。使用waitgroup实现同步,内部设置计数器(add,done,wait),通过add设置计数器值,通过done实现协程运行结束后的计数器-1,最后通过wait阻塞,所有协程运行结束后结束主协程。

  2. 依赖管理 goPath无法实现package多版本控制 goVender存储项目依赖的副本,不同项目间存在不兼容的包,可能出错 goModule管理依赖包和依赖包版本 依赖管理三要素,配置文件,中心仓库,本地工具 go选择最低兼容版本

依赖分发-Proxy 缓存package历史版本,保证稳定可靠的依赖

  1. 测试 回归,集成,单元测试 单元测试,检测函数,模块的功能正确性 assert.Equal 判断相等 单元测试-覆盖率,单元模块有多少代码在测试过程中运行,保证测试的完备性 mock打桩,针对函数或方法。不依赖本地文件,不强依赖本地file文件,使用完要卸载 基准测试,测试性能

项目实战

需求:展示话题和回帖列表 topic话题 postlist回帖

定义结构体 topic(id,title,content,time) post(id,topicId,content,time)

分层设计(数据层,逻辑层,视图层)

索引:数据行映射到map中

sync.Once 单例模式