工程实践| 青训营笔记

61 阅读2分钟

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

本堂课重点内容

01.语言进阶

02.依赖管理

03.测试

04.项目实战

详细知识点介绍

语言进阶

并发编程

协程与线程

image.png 协程可以理解为轻量级的线程,一个线程可以并发的实现多个协程,go语言一次可以调用上万个协程使用。

如何开启协程

在函数前面加上go关键字,即可为一个函数创建一个协程来运行。

通道

创建通道: make(chan 元素类型, [缓冲大小])

package concurrence

func CalSquare() {
   src := make(chan int)
   dest := make(chan int, 3)
   go func() {
      defer close(src)
      for i := 0; i < 10; i++ {
         src <- i
      }
   }()
   go func() {
      defer close(dest)
      for i := range src {
         dest <- i * i
      }
   }()
   for i := range dest {
      //复杂操作
      println(i)
   }
}

例:一个协程生产数字,另一个协程处理数字

通过协程可以实现数据的多并发

并发安全Lock

多个协程对同一数据区数据进行并发操作时容易引发安全问题,需要加锁来实现临界区权限的安全控制。在项目开发中,共享内存的错误难以定位,所以要尤其注意。

依赖管理

依赖管理演进

Gopath:无法实现package的多版本控制

Go Vendor:引入依赖副本解决依赖冲突问题,但是无法控制依赖的版本

Go Vendor:官方发布的比较完善的依赖管理方法

依赖配置-go.mod

image.png

依赖分发-Proxy

为解决如果作者删除或修改仓库导致无法正常拉取依赖的问题,用proxy可以保证依赖的稳定性,直接从proxy拉取依赖。

image.png

测试

go中单元测试规则

测试文件以_test.go结尾

image.png

fun TestXxx(*testing.T)

image.png

初始化逻辑放到TestMain中

image.png

项目实践

社区话题页面

设计分层结构 image.png

数据层

在存储数据的时候,用map存储,这样在做数据查询的时候更高效,时间复杂度O(1)。

逻辑层

image.png

如图所示,两个信息之间没有交互的时候,就可用到才学的go关键字做并行处理。

视图层

注意业务错误代码,添加错误处理。

总结

掌握了并发编程的相关关键字的用法。go中的依赖管理这一块不是很熟悉,需要多加练习。了解了测试的重要性,良好的测试能够大幅度降低亏损。