zoukankan      html  css  js  c++  java
  • Go strings.Builder

    Go strings.Builder 字符串拼接操作优化

    最开始的时候,可能会使用如下的操作:

    package main
    
    func main() {
        ss := []string{
            "sh",
            "hn",
            "test",
        }
    
        var str string
        for _, s := range ss {
            str += s
        }
    
        print(str)
    }
    

    与许多支持string类型的语言一样,golang中的string类型也是只读且不可变的。因此,这种拼接字符串的方式会导致大量的string创建、销毁和内存分配。如果你拼接的字符串比较多的话,这显然不是一个好的方法。

    • 在 Golang 1.10 以前,可以使用bytes.Buffer来优化:
    package main
    
    import (
        "bytes"
        "fmt"
    )
    
    func main() {
        ss := []string{
            "sh",
            "hn",
            "test",
        }
    
        var b bytes.Buffer
        for _, s := range ss {
            fmt.Fprint(&b, s)
        }
    
        print(b.String())
    }
    

    这里使用 var b bytes.Buffer 存放最终拼接好的字符串,一定程度上避免上面 str 每进行一次拼接操作就重新申请新的内存空间存放中间字符串的问题。

    但这里依然有一个小问题: b.String() 会有一次 []byte -> string 类型转换。而这个操作是会进行一次内存分配和内容拷贝的。

    • 如果现在已经在使用 golang 1.10, 那么你还有一个更好的选择:strings.Builder:
    package main
    
    import (
        "fmt"
        "strings"
    )
    
    func main() {
        ss := []string{
            "sh",
            "hn",
            "test",
        }
    
        var b strings.Builder
        for _, s := range ss {
            fmt.Fprint(&b, s)
        }
    
        print(b.String())
    }
    

    参考:https://liudanking.com/performance/golang-strings-builder-原理解析/

  • 相关阅读:
    机器学习面试问题7
    机器学习面试问题6
    机器学习面试问题5
    机器学习面试问题4
    机器学习面试问题3
    机器学习面试问题2
    机器学习面试问题1
    推荐算法
    机器学习面试问题8
    决策树与随机森林算法
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/8776172.html
Copyright © 2011-2022 走看看