golang性能的字符串连接比较

问题描述 投票:0回答:1

我是新手,试图找出strings.Join方法+常规连接]相比的使用。

为了进行比较,我在os.Args上同时使用这两种方法作为要连接的字符串列表。

我的串联功能代码是:

func regular_concatenation() {
    var s, sep string
    for i := 1; i < len(os.Args); i++ {
        s += sep + os.Args[i]
        sep = " "
    }
    fmt.Println(s)
}

func join_concatenation() {
    fmt.Println(strings.Join(os.Args, " "))
}

并且性能检查的主要功能是:

func main() {
    var end_1, end_2 float64
    var start_1, start_2 time.Time

    start_1 = time.Now()
    for i:=0; i < 100; i++ {
        ex1_3_join_concatenation()
    }
    end_1 = time.Since(start_1).Seconds()

    start_2 = time.Now()
    for i:=0; i < 100; i++ {
        ex1_3_regular_concatenation()
    }
    end_2 = time.Since(start_2).Seconds()

    fmt.Println(end_1)
    fmt.Println(end_2)
}

问题是-当我运行代码时,用20个参数(os.Args)说,我得到的结果是[[strings.Join方法比常规合并慢

这让我感到困惑,因为我的理解方式-使用常规+ =方法时,它每次都会创建一个新的字符串引用(因为字符串在golang中是不可变的),因此应该运行垃圾收集器以收集未使用的数据,这会浪费时间。

所以问题是-字符串。加入实际上是一种更快的方法吗?如果是的话-在此示例中我在做什么错?

我是新手,试图弄清楚strings.Join方法的使用,与使用+ =的常规串联相比。为了进行比较,我在os.Args上同时使用了这两种方法,将它们作为字符串的列表...

performance go garbage-collection
1个回答
1
投票
由于各种编译器优化,字符串连接

可以

© www.soinside.com 2019 - 2024. All rights reserved.