Go进阶 | 青训营笔记

50 阅读1分钟

Day2 Go进阶

协程

func hello(i int) {
   println("hello " + fmt.Sprint(i))
}
func Helloroutine() { //协程
   for i := 0; i < 5; i++ {
      go func(j int) {
         hello(j)
      }(i)
   }
   //防止该进程跑完,协程还没有跑完
   time.Sleep(time.Second)
}

channel

func ClaSquare() {
   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

var (   //该变量操作可上锁
   x    int64
   lock sync.Mutex
)

func addwithLock() {
   for i := 0; i < 2000; i++ {
      lock.Lock()
      x++
      lock.Unlock()
   }
}
func addwithoutLock() {
   for i := 0; i < 2000; i++ {
      x++
   }
}
func main() {
   x = 0
   for i := 0; i < 5; i++ {
      go addwithLock()
   }
   time.Sleep(time.Second)
   println("Lock:", x)
   x = 0
   for i := 0; i < 5; i++ {
      go addwithoutLock()
   }
   time.Sleep(time.Second)
   println("withoutLock:", x)
}

waitgroup

func hello(i int) {
   println("hello " + fmt.Sprint(i))
}
func Helloroutine() { //协程
   var wg sync.WaitGroup
   wg.Add(5)
   for i := 0; i < 5; i++ {
      go func(i int) {
         //defer后面的函数只有在当前函数执行完毕后才能执行,通常用于释放资源。
         defer wg.Done()
         hello(i)
      }(i)
   }
   wg.Wait()
}

依赖管理Go Module

1.配置文件,描述依赖 go.mod

2.中心仓库管理依赖库 Proxy

3.本地工具 go get/mod

屏幕截图 2023-01-16 192319.png

单元测试

image.png

image.png

Mock测试

image.png

基准测试

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供了基准测试的能力