golang字符串拼接

zr_go · 2018-03-06 11:07:04 · 1477 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-06 11:07:04 的主题,其中的信息可能已经有所发展或是发生改变。

四种拼接方案:

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

2,直接用 + 操作符,这个和+=其实一个意思了。

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

4,利用Buffer( Buffer是一个实现了读写方法的可变大小的字节缓冲 ),将所有的字符串都写入到一个Buffer缓冲区中,最后再统一输出,这种方法最快。

 

代码示例

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")

          }

          buffer.String() // 拼接结果

          e := time.Now()

          fmt.Println("1 time is ", e.Sub(s).Seconds())



          //第二种方法

          s = time.Now()

          var sl []string

          for i := 0; i < 100000; i++ {

                    sl = append(sl, "test is here\n")

          }

          strings.Join(sl, "")

          e = time.Now()

          fmt.Println("2 time is", e.Sub(s).Seconds())



          //第三种方法

          s = time.Now()

          str := ""

          for i := 0; i < 100000; i++ {

                    str += "test is here\n"

          }

          e = time.Now()

          fmt.Println("3 time is ", e.Sub(s).Seconds())



          //第四种方法

          s = time.Now()

          str4 := ""

          for i := 0; i < 100000; i++ {

                    str4 = str4 + "test is here"

          }

          e = time.Now()

          fmt.Println("4 time is ", e.Sub(s).Seconds())

}

 

 

运行结果如下

 

1 time is 0.00402775

2 time is 0.019025534

3 time is 7.162544528

4 time is 6.538371249

 

 


// bytes.Buffer的方法, 将给定字符串追加(append)到Buffer

func  (b *Buffer) WriteString(sstring) (nint, err error)

 

// 字符串拼接, 把slice通过给定的sep连接成一个字符串

func  Join(a []string, sepstring)  string


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1477 次点击  
加入收藏 微博
2 回复  |  直到 2018-03-09 15:44:37
Kevin1996cn
Kevin1996cn · #1 · 7年之前

mk

jong
jong · #2 · 7年之前

go 1.10 可以这样

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    for i := 3; i >= 1; i-- {
        fmt.Fprintf(&b, "%d...", i)
    }
    b.WriteString("ignition")
    fmt.Println(b.String())

}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传