@Tmacy
2016-06-13T09:53:41.000000Z
字数 1097
阅读 1313
golang
转自:http://ju.outofmemory.cn/entry/244594
目前主要有三种方法:
直接用"+="操作符,直接将多个字符串拼接。最直观的方法,不过当数据量非常大时用这种拼接访求是非常低效的。
用字符串切片([]string)装载所有要拼接的字符串,最后使用strings.Join()函数一次性将所有字符串拼接起来。在数据量非常大时,这种方法的效率也还可以的。
利用Buffer(Buffer是一个实现了读写方法的可变大小的字节缓冲),将所有的字符串都写入到一个Buffer变量中,最后再统一输出。这种方法的效率最变态,达到“日天”级别。
以下是我写的一段go语法代码对三种方法进行验证,同时拼接10万条字符串,方法一用时大概到11-12秒,方法二用时16-17毫秒,方法三用时4毫秒。
package main
import (
"bytes"
"fmt"
"strings"
"time"
)
func main() {
var buffer bytes.Buffer
s := time.Now()
for i := 0; i < 100000; i++ {
buffer.WriteString("test is here\n")
}
//fmt.Println("拼接后的结果为-->", buffer.String())
sa := buffer.String()
e := time.Now()
fmt.Println("buffer taked time is ", e.Sub(s).Seconds())
sb := ""
s = time.Now()
for i := 0; i < 100000; i++ {
sb += "test is here\n"
}
e = time.Now()
fmt.Println("+= taked time is ", e.Sub(s).Seconds())
if sb == sa {
fmt.Println("is same")
}
s = time.Now()
var sl []string
for i := 0; i < 100000; i++ {
sl = append(sl, "test is here\n")
}
sc := strings.Join(sl, "")
e = time.Now()
fmt.Println("append taked time is", e.Sub(s).Seconds())
if sb == sc {
fmt.Println("is same too")
}
}
输出结果
>go run main.go
buffer taked time is 0.006187675
+= taked time is 16.032386137
is same
append taked time is 0.021170944
is same too