go中的相关依赖| 青训营笔记

45 阅读2分钟

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

  1. 1 go中特有的groutine与Thread对比
  • groutine是内核态,一个Thread可以运行多个groutine,是栈上的KB
  • Thread是用户态,栈MB
  1. 在go中可以通过go 函数 实现一个协程
  • go func(){
  • fmt.Println("hello")
    
  • }
  1. go 是通过CSP即通信实现共享内存
  • chan分为无缓冲的make(chan int)和有缓冲的make(chan int, 3)
  • 在chan中可以进行输入和取出数据,实现内存共享
  • ch1 := make(chan int)
  • ch2 := make(chan int, 3)
  • go func(){
  • for i:=0; i<5; i++{
    
  •     ch1 <- i
    
  • }
    
  • }
  • go func(){
  • for j := range ch1
    
  • ch2 <- j
    
  • }
  • 这样子可以实现相关共享
  1. 安全性 锁lock 和 线程池sync.waitGroup
  • 可以通过sync.Lock 和sync,Unlock对临界共享资源进行权限控制,但存在加锁流程,效率不高
  • var wg sync.WaitGroup
  • wg.Add(n)预先分配线程池
  • wg.Done()在运行一个groutine之后n-1
  • wg.wait()表示当n==0时,所有的groutine运行完成
func hello() {
   wg.Add(5)
   for i := 0; i < 5; i++ {
      go func(j int) {
         defer wg.Done()
         fmt.Println(j)
      }(i + 1)
   }
   wg.Wait()
}
  1. go 项目的依赖包
  • 配置文件,本地函数相关依赖 go.mod
  • 中心仓库代理获取网络相关资源包 Proxy
  • 本地工具下载相关依赖包 go get
  • go mod inie 初始化,创建go.mod文件
  • go mod downland 下载模板到本地
  • go mod tidy 增加需要的依赖,删除不需要的依赖
  1. go项目测试
  • 单元测试、Mock测试、基准测试
  • 单元测试主要是对相关接口、函数、模块的测试,
  • 测试文件_test.go结尾,测试函数Testxxx开头
func TestHello(t *testing.T){
    a := 待测试函数返回值
    b := 预期输出值
    assert.Equal(t,b,a)进行判断
}
  • Mock测试主要是对函数或者method进行打桩

image.png

  • 基准测试:
  • 基准测试是指一段程序的运行性能和耗费CPU的程度