Go语言进阶|青训营

91 阅读2分钟

Go语言进阶

  1. 并发与并行: 并发和并行是Go语言的核心特性。并发是指同时处理多个任务(在单一处理器上交替执行)。并行则是指同时运行多个任务(在多个处理器上同时执行)。

  2. Goroutine: Goroutine是Go语言中实现并发的主要方法,它比线程更轻量级,更易于管理。每个Goroutine都有自己的调用堆栈,并且可以在其他Goroutine之间进行切换。创建一个新的Goroutine只需要使用关键字go即可。

    go funcName(parameters)
    
  3. CSP: CSP(Communicating Sequential Processes)是Go语言并发模型的基础,它强调通过通信来共享内存,而不是通过共享内存来通信。这使得Go语言的并发编程更加安全和方便。

  4. Channel: Channel是Go语言中实现CSP模型的重要工具,它提供了一种机制,允许两个并发实体进行通信和同步。Channel可以被视为Goroutines之间传递数据的管道。

    ch := make(chan int)
    go func() {
        ch <- doSomething()
    }()
    result := <-ch
    
  5. 并发安全Lock: 在并发编程中,为了保证数据的一致性和完整性,我们经常需要使用锁。Go语言的sync包提供了两种锁类型:sync.Mutex和sync.RWMutex。前者是互斥锁,后者是读写锁。

  6. WaitGroup: WaitGroup用于等待一组Goroutines完成。主Goroutine调用Add添加计数,然后在子Goroutine中调用Done来减少计数。当计数达到0时,Wait函数会返回。

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // do something
    }()
    wg.Wait()
    

依赖管理

  1. Gopath: Gopath是Go语言的工作区,它是环境变量,用于定义Go语言开发环境的工作空间位置。

  2. Govendor: Govendor是Go语言的一个依赖管理工具,它能够帮助你管理项目的依赖库。但由于Go 1.11版本引入了Go Modules,因此,govendor已经逐渐被淘汰。

  3. Go Modules: Go Modules是Go 1.11及更高版本的官方依赖管理工具。它解决了其他依赖管理工具的一些问题,例如依赖版本管理、跨代理获取依赖等。

测试

  1. 单元测试: Go语言的testing包提供了单元测试的支持。在Go语言中,以_test.go结尾的文件会被go test命令识别为测试文件。单元测试函数以Test为前缀,并接受一个*testing.T类型的参数。

    func TestFunc(t *testing.T) {
        // testing goes here
    }
    
  2. Mock测试: Mock测试是单元测试的一种,它使用模拟对象替换掉真实对象,以便在测试中模拟真实对象的行为。Go语言的gomock和testify库都可以用来做mock测试。

  3. 基准测试: 基准测试是用来测试一段程序(可能是一个函数)的性能。在Go语言中,基准测试函数以Benchmark为前缀,并接受一个*testing.B类型的参数。

    func BenchmarkFunc(b *testing.B) {
        for i := 0; i < b.N; i++ {
            // function to be benchmarked goes here
        }
    }