golang多種字符串拼接性能基準測試

package main

import ( "bytes" "fmt" "strings" "testing" )

// 一:字節拼接 func BenchmarkStringOper(b *testing.B) { b.ResetTimer() bf := bytes.NewBufferString("") for i := 0; i < b.N; i++ { bf.WriteString("golang ") } }

// 二:字符串工具拼接 func BenchmarkStringOper2(b *testing.B) { b.ResetTimer() bf := strings.Builder{} for i := 0; i < b.N; i++ { bf.WriteString("golang ") } }

// 三:使用 fmt.Sprint 拼接 func BenchmarkStringOper3(b *testing.B) { b.ResetTimer() var s string for i := 0; i < b.N; i++ { s = fmt.Sprint(s, "golang ") } }

// 四:使用 + 號拼接 func BenchmarkStringOper4(b *testing.B) { b.ResetTimer() var s string for i := 0; i < b.N; i++ { s = s + "golang " } }

運行基準測試:go test -v -bench . -benchmem

goos: windows goarch: amd64 pkg: go_mods/src/handles/str cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz BenchmarkStringOper BenchmarkStringOper-8 160907169 6.466 ns/op 16 B/op 0 allocs/op BenchmarkStringOper2 BenchmarkStringOper2-8 231565146 8.768 ns/op 41 B/op 0 allocs/op BenchmarkStringOper3 BenchmarkStringOper3-8 150400 144036 ns/op 1059633 B/op 4 allocs/op BenchmarkStringOper4 BenchmarkStringOper4-8 227385 111895 ns/op 799888 B/op 1 allocs/op PASS ok go_mods/src/handles/str 53.251s

ns/op 是完成一次迭代所需的大致時間 B/op 是內存分配的字節數 allocs/op 是內存交換次數 ns/op 、B/op 、allocs/op 數值都是越少越好

從基準測試可以看出:golang操作字符串拼接使用”一:字節拼接 bytes.NewBufferString("") “的方式是最高效的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章