day2学习笔记 | 青训营

75 阅读1分钟

1 语言进阶 并发编程

1.1协程

——go语言更适合高并发场景

开启协程:在调用函数时,函数前加go关键字

提倡通过通信共享内存,而不是通过共享内存实现通信

1.2 channel

make(chan 元素类型,[缓冲大小])

eg:A 子协程发送0-9

B 子协程计算输入数字的平方

主协程输出最后的平方数

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)
    }
}

1.3 并发安全lock

var{
    x int64
    Lock sync.Mutex
}
​
func addWithLock(){
    for i:=0;i<200;i++{
        Lock.Lock()
        x+=1
        Lock.Unlock()
    }
}

1.4 waitgroup

没咋看懂

2 依赖管理

GOPATH

无法实现package多版本控制

GO Vendor

通过每个项目引入一份依赖副本,解决多个项目需要同一个package依赖的冲突问题

无法控制依赖的版本

GO Module

通过go.mod文件管理依赖包版本

2.1 配置文件

go.mod 描述依赖

2.2 中心仓库管理依赖库 Proxy

2.3 go mod

go mod init 初始化,创建go.mod

go mod download 下载模块到本地缓存

go mod tidy 增加需要的依赖,删除冗余依赖

3 测试

3.1单元测试

规则:1)所有测试文件以_test.go结尾

2)func TestXXX(name *testing.T)

3)初始化逻辑放到TestMain中

func TestMain(m *testing.M){
    //测试前准备
    code:=m.Run()
    //测试后
    os.Exit(code)
}

3.1.4 assert

需要引入包

assert.Equal(t,expectOutput,output)

3.1.5 覆盖率

△在test的命令行运行

go test xxx_test.go xxx.go --cover

可以查看测试覆盖率

3.2 mock测试

Mock 测试就是在测试活动中,对于某些不容易构造或者不容易获取的数据/场景,用一个Mock对象来创建以便测试的测试方法。

此处需理解面向接口的编程。

3.3 基准测试

基准测试是一项用于测试和评估软件性能指标的方法,主要测试代码的性能。

规则:

基准测试函数必须以 Benchmark 开头,且必须是可导出的

函数的签名必须接收一个指向 testing.B 类型的指针,并且不能返回任何值;

最后的 for 循环很重要,被测试的代码要放到循环里;

b.N 是基准测试框架提供的,表示循环的次数,因为需要反复调用测试的代码,才可以评估性能。

3.3内容来源:作者:小雄Ya 链接:juejin.cn/post/713499… 来源:稀土掘金