GoBuilder教程展示了如何使用strings.Builder在Golang中高效地构建字符串。
我们使用各种写入方法构建一个字符串,例如WriteString或WriteRune。最后,我们使用String方法返回累积的字符串。
Builder使用内部切片来存储数据。
$ go version go version go1.18.1 linux/amd64
我们使用Go版本1.18。
Go构建器示例
下一个示例使用strings.Builder来形成消息。
package main
import (
"fmt"
"strings"
)
func main() {
builder := strings.Builder{}
builder.WriteString("There")
builder.WriteString(" are")
builder.WriteString(" three")
builder.WriteString(" hawks")
builder.WriteString(" in the sky")
fmt.Println(builder.String())
}
我们使用Builder的WriteString构建消息。
$ go run simple.go There are three hawks in the sky
下一个示例从字节切片构建一个字符串。
package main
import (
"fmt"
"strings"
)
func main() {
builder := strings.Builder{}
data1 := []byte{72, 101, 108, 108, 111}
data2 := []byte{32}
data3 := []byte{116, 104, 101, 114, 101, 33}
builder.Write(data1)
builder.Write(data2)
builder.Write(data3)
fmt.Println(builder.String())
}
该示例使用Write构建一个字符串。
$ go run simple2.go Hello there!
GoBuilder-构建格式化字符串
在下一个示例中,我们构建一个格式化字符串。
package main
import (
"fmt"
"strings"
)
func main() {
builder := strings.Builder{}
animals := "hawks"
n := 3
builder.WriteString("There are ")
builder.WriteString(fmt.Sprintf("%d %s ", n, animals))
builder.WriteString("in the sky.")
msg := builder.String()
fmt.Println(msg)
}
我们使用fmt.Sprintf函数创建格式化字符串,并使用WriteString将其附加到构建器。
GoBuilder-比较性能
在下一个示例中,我们比较了Builder与使用+运算符的字符串连接的性能。
package main
import (
"fmt"
"strings"
"time"
)
func main() {
t0 := time.Now()
builder := strings.Builder{}
for i := 0; i < 100_000; i++ {
builder.WriteString("falcon")
}
t1 := time.Now()
result := ""
for i := 0; i < 100_000; i++ {
result += "falcon"
}
t2 := time.Now()
fmt.Println(t1.Sub(t0))
fmt.Println(t2.Sub(t1))
}
该示例对两种字符串连接方式的效率进行了基准测试;它添加了单词falcon十万次。
$ go run compare.go 2.232505ms 8.007376273s
正如我们从输出中看到的那样,Builder的效率要高得多。
在本教程中,我们使用了Go中的strings.Builder。
列出所有Go教程。
