评估性能工具:benchmark
使用方法
在_test.go文件中新建Benchmarkxxx的函数(Benchmark必须要有,且B为大写)
运行结果中间的为执行次数,最后的为每次执行时间
特殊结构的优化方法
Slice
在make初始化时提供切片大小,避免之后多次申请内存(类似于C++的vector)
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()
}
运行结果显示,直接使用+拼接最慢,原因是go中的字符串不可变,每次+相当于重新创建一个新的字符串,然后把原来的复制过去,类似于C++中的字符串+
Builder和Buffer都是字符数组,因此可以扩容,不需要复制