Go语言入门-工程实践小结 | 青训营

113 阅读2分钟

go语言的高性能体现在第二节课有了初步的认知,goroutine以及其通过通信来共享内存的特点在高性能上帮助很大。其次,gomod对于go项目的依赖管理也是在开发过程中意义重大,也认知一些基本的测试单元来对项目代码进行评估。最后学习了一个社区评论页面的项目实施,初步接触到了gogin框架来搭建goweb项目。

并发编程

协程:轻量级线程,用户态,栈KB级别; 线程:线程可以跑多个协程,内核态,栈MB级别;

并发是go语言的特点之一,使用关键字go可以很方便的开启一个协程。

CSP(Communicating Sequential Processses)

go语言的并发是基于CSP模型来实现的,它提倡通过通信共享内存而不是通过共享内存来实现通信的,它更加注重于共享数据的channel。

Channel

go语言中的channel是实现进程之间通信的重要一环。channel可以在进程之间传递,一个信息被发送到channel中,最终一定会被消费掉的,类似于一个阻塞的消息队列。

在go语言中channel可以被单独创建: make(chan 元素类型,[缓冲大小])

WaitGroup

go语言中的WaitGroup也可以用来实现多个线程的同步。它的实现原理是在WaitGroup中维护一个计数器,当我们有N个并发任务进行工作时,通过调用wg.Add(N)来将计数器的值加N。每个任务完成时,调用wg.Done()来将计数器的值减一。同时调用wg.Wait()进入阻塞状态等待计数器更改至0。在高并发场景如评论,点赞可以很好的运用。

依赖管理

go语言目前运用go module来管理第三方依赖。go module可以准确记录项目依赖,使用了哪些第三方包,是什么版本。

对于一个项目,可以通过go mod init 项目module名称来创建go.mod文件来进行go module依赖管理。

测试

测试一般分为回归测试,集成测试和单元测试。单元测试对于项目开发的覆盖率是最高的,从而也决定了项目代码的质量。

单元测试-规则

  • 所有测试的代码文件以_test.go结尾
  • 测试的函数声明:func Testxxx(t *testing.T)
  • 初始化逻辑放到TestMain中