这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
今天也是青训营开始的第二天,我收获很多,下面就来分享一下。
一、本堂课重点内容
今天青训营的内容是与Go语言工程方面相关的内容,今天主要学习了Go语言的协程、依赖管理以及Go语言自带的测试相关的功能。本节课的重点内容主要有四个方面:
- 并发编程 重点主要在协程、通道、线程同步等部分,实践中使用频繁
- 依赖管理 主要在于Go Module的学习应用
- 单元测试 主要在于了解单元测试、基准测试的概念和规则,进行完整测试。
- 项目实战 完成青训营话题页的开发工作,充分运用以上知识点。
二、详细知识点介绍
1.并发编程
线程在内核态,较为消耗资源;协程在用户态,是轻量级线程,资源消耗较小。 在调用函数前加上关键词go即可使用协程。 通过make(chan 元素类型,缓冲大小)来建立通道,没有缓冲大小参数则建立无缓冲通道。 带缓冲的channel可以解决生产消费不均衡(生产快消费慢)带来的执行效率问题。 lock sync.Mutex创建互斥量关键字lock,通过lock.Lock(),lcok.Unlock()来加减锁。 开启协程用Add()将计数器增加若干,协程执行结束用Done()将计数器-1,Wait()阻塞等待计数器为0。
2.依赖管理
Go依赖管理演进
- GoPath 无法实现package的多版本控制
- GoVender 无法控制依赖的版本。更新项目又可能出现依赖冲突,导致编译出错。
- GoModule 可以定义规则管理关系。
依赖管理三要素
- 配置文件,描述依赖 go.mod
- 中心仓库管理依赖库 Proxy
- 本地工具 go get/mod
三、个人总结
虽然Go的依赖管理并不像Java那样可以通过maven来进行统一有效的管理,但是go mod的模式也有他的可行之处以及优势。go的依赖管理主要经过了gopath、go vendor以及go mod阶段,这里相对还是比较熟悉,不做过多记录。 依赖管理三要素: 配置文件,描述依赖。中心仓库管理依赖库。本地工具。依赖管理和测试还需要进一步学习,本节课项目难度较大,有很多知识点需要进一步吸收消化,比如业务逻辑的设计实现、gin的使用细节等。