开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

在Golang中使用strings.Builder

GoBuilder教程展示了如何使用strings.Builder在Golang中高效地构建字符串。

我们使用各种写入方法构建一个字符串,例如WriteStringWriteRune。最后,我们使用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教程。

未经允许不得转载:我爱分享网 » 在Golang中使用strings.Builder

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏