[ Go进阶及工程实践 | 青训营笔记 ]

87 阅读2分钟

[ Go进阶及工程实践 | 青训营笔记 ]

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

零、前言:

记个笔记顺便(恰青豆还是有很多不完善也有可能对的地方还请大佬们指正

一、本堂课重点内容:

高并发

依赖管理

软件测试

项目实战

二、详细知识点介绍:

2.1 高并发

  • Goroutine

    协程是一种用户态的轻量级线程,协程的调度完全由用户控制。一个线程可以多个协程,一个进程也可以单独拥有多个协程。

  • Channel 无缓冲chan要用放在协程 go 里面,放在主协程会堵塞

    chan关闭任可读但是不可写

  • Sync

    :lock:lock 锁

    lock sync.Mutex //初始化
    lock.Lock()
    lock.Unlock()
    

            waitgroup  内部有一计数器 这样末尾就不用加 time.Sleep() 来等待协程了

        wg := sync.WaitGroup{}
        wg.Add(100) // 初始化计数器为100
        wg.Done() // 完成一个协程计数器减一
        wg.Wait()  // 等待计数器为0
    

2.2 依赖管理

依赖配置会选择最低向下兼容的版本

常用指令

go mod init #初始化,创建go.mod文件
go mod download #下载模块到本地缓存
go mod tidy # 增加需要依赖

2.3 测试

测试文件以 _test.go 结尾

函数 func TestXxx(*testing.T)

初始化逻辑放在 TestMain(m *Testing.M) 里面

  • 单元测试

    asser.Equal(t,希望结果,实际结果)
    
  • 覆盖率测试

    go test xx.go --cover
    
  • Mock

    monkey GitHub - bouk/monkey: Monkey patching in Go     打桩的目的      

    打桩的目的主要有:隔离、补齐、控制。  

    隔离是指将测试任务从产品项目中分离出来,使之能够独立编译、链接,并独立运行。隔离的基本方法就是打桩,将测试任务之外的,并且与测试任务相关的代码,用桩来代替,从而实现分离测试任务。例如函数A调用了函数B,函数B又调用了函数C和D,如果函数B用桩来代替,函数A就可以完全割断与函数C和D的关系。

    补齐是指用桩来代替未实现的代码,例如,函数A调用了函数B,而函数B由其他程序员编写,且未实现,那么,可以用桩来代替函数B,使函数A能够运行并测试。补齐在并行开发中很常用。

    控制是指在测试时,人为设定相关代码的行为,使之符合测试需求

  • 基准测试

    BenchmarkXxx(b *testing.B)开头 用于测试性能

    go test -bench=.
    

2.4 实战

没有当时的原文件还是有点难理解的

sync.Once 是 Go 标准库提供的使函数只执行一次的实现

大概是读取文件用map存数据降低耗时

具体还要再看看

三、总结:

感觉每次实战理解还是要花点时间啊啊啊