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教程。