golang 字符串拼接方法对比分析

 更新时间:2023年09月04日 10:51:59   作者:guyan0319  
这篇文章主要为大家介绍了golang 字符串拼接方法对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

字符串拼接

字符串拼接有以下几种方法

  • 加号+
  • fmt.Sprintf
  • strings.Join
  • bytes.Buffer
  • strings.Builder 此方法为官方推荐

新建单元测试文件string_test.go

package test
import (
    "bytes"
    "fmt"
    "strings"
    "testing"
)
func BenchmarkFmtSprintf(b *testing.B) {
    for i := 0; i < b.N; i++ {
        s := fmt.Sprintf("%s%s", "abcdefghijklmnopqrstuvwxyz", "123456789")
        fmt.Errorf(s)
    }
}
func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        s := "abcdefghijklmnopqrstuvwxyz" +"123456789"
        fmt.Errorf(s)
    }
}
func BenchmarkStringsJoin(b *testing.B) {
    for i := 0; i < b.N; i++ {
        s := strings.Join([]string{"abcdefghijklmnopqrstuvwxyz","123456789"}, "")
        fmt.Errorf(s)
    }
}
func BenchmarkBuffer(b *testing.B) {
    for i := 0; i < b.N; i++ {
        buf := bytes.Buffer{}
        buf.WriteString("abcdefghijklmnopqrstuvwxyz")
        buf.WriteString("123456789")
        fmt.Errorf(buf.String())
    }
}
func BenchmarkBuilder(b *testing.B) {
    for i := 0; i < b.N; i++ {
        builder := strings.Builder{}
        builder.WriteString("abcdefghijklmnopqrstuvwxyz")
        builder.WriteString("123456789")
        fmt.Errorf(builder.String())
    }
}

执行

go test string_test.go -benchmem -bench=".*"

结果:

BenchmarkFmtSprintf-4 2962962 400.6 ns/op 112 B/op 3 allocs/op
BenchmarkAdd-4 6629833 207.7 ns/op 64 B/op 2 allocs/op
BenchmarkStringsJoin-4 4255318 291.6 ns/op 112 B/op 3 allocs/op
BenchmarkBuffer-4 2948402 368.3 ns/op 176 B/op 4 allocs/op
BenchmarkBuilder-4 3149605 352.1 ns/op 160 B/op 4 allocs/op
PASS
ok command-line-arguments 8.219s
执行效率排序+>join>fmt.Sprintf>strings.Builder>bytes.Buffer

新建单元测试文件string2_test.go

package test
import (
    "bytes"
    "fmt"
    "strings"
    "testing"
)
func BenchmarkAdd2(b *testing.B) {
    s:= "abcdefghijklmnopqrstuvwxyz"
    for i := 0; i < b.N; i++ {
        s += "abcdefghijklmnopqrstuvwxyz"
    }
    fmt.Errorf(s)
}
func BenchmarkBuffer2(b *testing.B) {
    buf := bytes.Buffer{}
    for i := 0; i < b.N; i++ {
        buf.WriteString("abcdefghijklmnopqrstuvwxyz")
    }
    fmt.Errorf(buf.String())
}
func BenchmarkBuilder2(b *testing.B) {
    builder := strings.Builder{}
    for i := 0; i < b.N; i++ {
        builder.WriteString("abcdefghijklmnopqrstuvwxyz")
    }
    fmt.Errorf(builder.String())
}

执行

go test string2_test.go -benchmem -bench=".*"

结果:

goos: windows
goarch: amd64
cpu: Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz
BenchmarkAdd2-4 10000 101400 ns/op 133806 B/op 1 allocs/op
BenchmarkBuffer2-4 15974260 79.25 ns/op 145 B/op 0 allocs/op
BenchmarkBuilder2-4 17142856 59.38 ns/op 189 B/op 0 allocs/op
PASS
ok command-line-arguments 4.912s
执行效率排序:strings.Builder>bytes.Buffer>加号
且strings.Builder和bytes.Buffer分配内存大小和次数,要比加号效率更好

总结

由此可知在不同的使用场景,应使用不同的拼接方法,在一些简单的拼接字符串里使用加号简单高效,在复杂的拼接场景推荐strings.Builder和bytes.Buffer。

以上就是golang 字符串拼接方法对比分析的详细内容,更多关于golang 字符串拼接的资料请关注脚本之家其它相关文章!

相关文章

  • logrus hook输出日志到本地磁盘的操作

    logrus hook输出日志到本地磁盘的操作

    这篇文章主要介绍了logrus hook输出日志到本地磁盘的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 实现像php一样方便的go ORM数据库操作示例详解

    实现像php一样方便的go ORM数据库操作示例详解

    这篇文章主要为大家介绍了实现像php一样方便的go ORM数据库操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • golang常用库之字段参数验证库-validator使用详解

    golang常用库之字段参数验证库-validator使用详解

    这篇文章主要介绍了golang常用库:字段参数验证库-validator使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下
    2020-10-10
  • GoLang中的加密方法小结

    GoLang中的加密方法小结

    这篇文章主要介绍了GoLang中的加密方法。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 如何在Go中将[]byte转换为io.Reader

    如何在Go中将[]byte转换为io.Reader

    本文主要介绍了如何在Go中将[]byte转换为io.Reader,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • golang中为什么Response.Body需要被关闭详解

    golang中为什么Response.Body需要被关闭详解

    这篇文章主要给大家介绍了关于golang中为什么Response.Body需要被关闭的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • Go中的交叉编译问题

    Go中的交叉编译问题

    这篇文章主要介绍了Go中的交叉编译问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Go语言Goroutinue和管道效率详解

    Go语言Goroutinue和管道效率详解

    这篇文章主要为大家介绍了Go语言Goroutinue和管道效率使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 一步步教你编写可测试的Go语言代码

    一步步教你编写可测试的Go语言代码

    相信每位编程开发者们应该都知道,Golang作为一门标榜工程化的语言,提供了非常简便、实用的编写单元测试的能力。本文通过Golang源码包中的用法,来学习在实际项目中如何编写可测试的Go代码。有需要的朋友们可以参考借鉴,下面跟着小编一起去学习学习吧。
    2016-11-11
  • Go语言七篇入门教程一简介初识

    Go语言七篇入门教程一简介初识

    本篇是Go语言七篇入门系列第一篇Go语言初识及简单介绍,从现在开始一起打开Go语言的学习大门吧,希望能够有所帮助,祝大家多多进步
    2021-11-11

最新评论