Go语言进阶与依赖管理|青训营笔记

12 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第2天。

1 重要内容

  • 语言进阶
  • 依赖管理
  • 测试

2 详细内容

2.1 语言进阶

从并发编程的视角了解Go语言高性能的本质

协程

  • 是一个比线程更轻量级的资源单位,栈KB单位

CSP

  • 提倡通过通信实现共享内存

Chanel

  • make(chan 元素类型,[缓存大小])
  • 无缓存通道会同步化

并发安全-sync

Mutex是最简单的一种锁类型,同时也比较粗暴,当一个goroutine获得了Mutex后,其他goroutine只能乖乖等待这个goroutine释放该Mutex.通过调用Lock()方法对Mutex上锁,通过调用Unlock对Mutex解锁。

WaitGroup-sync

通过使用sync.WaitGroup,可以阻塞主线程,直到相应数量的子线程结束。一般用于等待一组线程的结束。 在sync.WaitGroup结构体对象中有三个方法,Add()、Done()、Wait()。Add()方法主要为WaitGroup的等待数+1或者+n;Done() 方法会减少WaitGroup计数器的值,一般在goroutine的最后执行;Wait()方法 阻塞当前协程,直到等待数归为0才继续向下执行。

  • 主函数中使用Wait()方法 一直阻塞,直到wg为零——也就是所有的100个for循环都运行完毕 waitgroup简单演示

2.2 依赖管理

依赖管理的演进路线

演进路线

  • gopath src是项目源码,pkg是存放编译的中间产物,bin存放GO项目的二进制文件。无法实现pkg的多版本控制。 src下只能有一个pkg。
  • govendor vendor目录存放当前项目依赖的副本。但是不好解决依赖包的版本变动。
  • gomodule 通过go.mod文件管理依赖包版本

依赖三要素

  • go.mod

模块路径,go版本号,单元依赖

一个 module 的版本号规则必须遵循语义化规范:v(major).(minor).(patch)格式。major: 大版本,发生不可兼容的改动时增加该版本;minor:小版本,当有新特性时增加该版本;patch:补丁版本,当有bug修复时增加该版本。

  • proxy

依赖如何下载,在哪里下载?

  • go get/mod

也有各个元素的具体解释

2.3 测试

单元测试实践出发

3 个人总结

讲授了一些关于go语言的运行原理,以及解释了刚开始配置环境的时候出现的种种问题。