GO语言性能优化 | 青训营

50 阅读1分钟

评估性能工具:benchmark

使用方法

在_test.go文件中新建Benchmarkxxx的函数(Benchmark必须要有,且B为大写

image.png 运行结果中间的为执行次数,最后的为每次执行时间

特殊结构的优化方法

Slice

在make初始化时提供切片大小,避免之后多次申请内存(类似于C++的vector)

image.png

image.png

Map

与Slice相同,也可以提前设置size,避免申请内存以及rehash

String

//三种字符串拼接方式
func Plus(n int, str string) string {//直接相加
    s := ""
    for i := 0; i < n; i++ {
       s += str
    }
    return s
}
func StrBuilder(n int, str string) string {//使用Builder
    var builder strings.Builder
    for i := 0; i < n; i++ {
       builder.WriteString(str)
    }
    return builder.String()
}
func ByteBuffer(n int, str string) string {//使用Buffer
    buf := new(bytes.Buffer)
    for i := 0; i < n; i++ {
       buf.WriteString(str)
    }
    return buf.String()
}

image.png

image.png

image.png 运行结果显示,直接使用+拼接最慢,原因是go中的字符串不可变,每次+相当于重新创建一个新的字符串,然后把原来的复制过去,类似于C++中的字符串+ Builder和Buffer都是字符数组,因此可以扩容,不需要复制