以下是一些用于从字符串中剥离所有空格字符的不同方法的基准:(源数据):
BenchmarkSpaceMap-8 2000 1100084 ns / op 221187 B / op 2分配/ opBenchmarkSpaceFieldsJoin-8 1000 2235073 ns / op 2299520 B / op 20 allocs / opBenchmarkSpaceStringsBuilder-8 2000 932298 ns / op 122880 B / op 1 allocs / op
SpaceMap
:用途strings.Map
; 随着遇到更多的非空白字符,逐渐增加分配的空间量SpaceFieldsJoin
:strings.Fields
和strings.Join
; 产生大量中间数据SpaceStringsBuilder
用途strings.Builder
; 执行一次分配,但是如果源字符串主要是空格,则可能会总体上分配。package main_test
import (
“strings”
“unipre”
“testing”
)func SpaceMap(str string) string {
return strings.Map(func(r rune) rune {
if unipre.IsSpace(r) {
return -1
}
return r
}, str)
}func SpaceFieldsJoin(str string) string {
return strings.Join(strings.Fields(str), “”)
}func SpaceStringsBuilder(str string) string {
var b strings.Builder
b.Grow(len(str))
for _, ch := range str {
if !unipre.IsSpace(ch) {
b.WriteRune(ch)
}
}
return b.String()
}func BenchmarkSpaceMap(b *testing.B) {
for n := 0; n < b.N; n++ {
SpaceMap(data)
}
}func BenchmarkSpaceFieldsJoin(b *testing.B) {
for n := 0; n < b.N; n++ {
SpaceFieldsJoin(data)
}
}func BenchmarkSpaceStringsBuilder(b *testing.B) {
for n := 0; n < b.N; n++ {
SpaceStringsBuilder(data)
}
}



