[关闭]
@Tmacy 2016-06-13T09:53:41.000000Z 字数 1097 阅读 1313

Golang 字符串拼接对比

golang


转自:http://ju.outofmemory.cn/entry/244594

目前主要有三种方法:

直接用"+="操作符,直接将多个字符串拼接。最直观的方法,不过当数据量非常大时用这种拼接访求是非常低效的。

用字符串切片([]string)装载所有要拼接的字符串,最后使用strings.Join()函数一次性将所有字符串拼接起来。在数据量非常大时,这种方法的效率也还可以的。

利用Buffer(Buffer是一个实现了读写方法的可变大小的字节缓冲),将所有的字符串都写入到一个Buffer变量中,最后再统一输出。这种方法的效率最变态,达到“日天”级别。

以下是我写的一段go语法代码对三种方法进行验证,同时拼接10万条字符串,方法一用时大概到11-12秒,方法二用时16-17毫秒,方法三用时4毫秒。

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "strings"
  6. "time"
  7. )
  8. func main() {
  9. var buffer bytes.Buffer
  10. s := time.Now()
  11. for i := 0; i < 100000; i++ {
  12. buffer.WriteString("test is here\n")
  13. }
  14. //fmt.Println("拼接后的结果为-->", buffer.String())
  15. sa := buffer.String()
  16. e := time.Now()
  17. fmt.Println("buffer taked time is ", e.Sub(s).Seconds())
  18. sb := ""
  19. s = time.Now()
  20. for i := 0; i < 100000; i++ {
  21. sb += "test is here\n"
  22. }
  23. e = time.Now()
  24. fmt.Println("+= taked time is ", e.Sub(s).Seconds())
  25. if sb == sa {
  26. fmt.Println("is same")
  27. }
  28. s = time.Now()
  29. var sl []string
  30. for i := 0; i < 100000; i++ {
  31. sl = append(sl, "test is here\n")
  32. }
  33. sc := strings.Join(sl, "")
  34. e = time.Now()
  35. fmt.Println("append taked time is", e.Sub(s).Seconds())
  36. if sb == sc {
  37. fmt.Println("is same too")
  38. }
  39. }

输出结果

  1. >go run main.go
  2. buffer taked time is 0.006187675
  3. += taked time is 16.032386137
  4. is same
  5. append taked time is 0.021170944
  6. is same too
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注