go-snippets

go test & bench

go test 默认执行当前目录下以xxx_test.go的测试文件。
go test -v 可以看到详细的输出信息。
go test -v xxx_test.go 指定测试单个文件,但是该文件中如果调用了其它文件中的模块会报错。

指定某个测试函数运行:
go test -v -test.run Testxxx
注意: 该测试会测试包含该函数名的所有函数,即如果待测试的函数名是TestSyncResourceQuota,那么指令go test -v -test.run TestSyncResourceQuota会测试包含该函数名的所有函数(比如下面的TestSyncResourceQuotaSpecChange、TestSyncResourceQuotaSpecHardChange等函数),详细如下:

go test -bench='Fib$'  -bench 参数支持传入一个正则表达式,匹配到的用例才会得到执行,例如,只运行以 Fib 结尾的 benchmark 用例

go test -bench='Fib$' -benchtime=5s . 那么我们可以使用 -benchtime 指定为 5s。例如:

代码demo

func TestIsNum(t *testing.T) {
    var apiRuleTests = []struct {
        in       string // input
        expected bool   // expected result
    }{
        {"123", true},
        {"key", false},
    }
    for _, tt := range apiRuleTests {
        actual := IsNum(tt.in)
        if actual != tt.expected {
            t.Errorf("IsNum(%s) = %t; expected %t", tt.in, actual, tt.expected)
        }
    }

}
func BenchmarkIsNum(b *testing.B) {
    for i := 0; i < b.N; i++ {
        IsNum("[0]")
        IsNum("key")
    }
}

 

go清空slice

a := []int{1,2,3}
a = nil //   json 会编码 nil
a = a[:0] //  json 会编码  [] 如果复用 用这种
fmt.Println(a, len(a), cap(a)) // [] 0 0

动态创建二位数组

dp := make([][]int,10)
for i:=0;i<10;i++{
    dp[i] = make([]int,10)
}