• go之字符串拼接使用->性能->背后原因


    前言

    因为之前是搞java的在使用字符串拼接的时候避免一直+产生新的String对象,就使用StringBuilder或者StringBuffer。最近在使用go的时候也需要字符串拼接,所以查了下go的字符串拼接的方式,发现有很多种,下面我们将从使用->直观的性能比较->背后的原因来娓娓道来。

    使用

    fmt.Sprintf

    1. func useFmtSprintf(s1 string, s2 string) {
    2. fmt.Println(fmt.Sprintf("%s-%s", s1, s2))
    3. }

    +

    1. func useAdd(s1 string, s2 string) {
    2. fmt.Println(s1 + s2)
    3. }

    strings.Join

    1. func useStringJoin(s1 string, s2 string) {
    2. fmt.Println(strings.Join([]string{s1, s2}, ""))
    3. }

    bytes.Buffer

    1. func useBuffer(s1 string, s2 string) {
    2. buffer := bytes.Buffer{}
    3. buffer.WriteString(s1)
    4. buffer.WriteString(s2)
    5. fmt.Println(buffer.String())
    6. }

    strings.Builder

    1. func useStringBuilder(s1 string, s2 string) {
    2. builder := strings.Builder{}
    3. builder.WriteString(s1)
    4. builder.WriteString(s2)
    5. fmt.Println(builder.String())
    6. }

    性能对比

    1. package test
    2. import (
    3. "bytes"
    4. "fmt"
    5. "strings"
    6. "testing"
    7. )
    8. // fmt.Printf
    9. func BenchmarkFmtSprintfMore(b *testing.B) {
    10. var s string
    11. for i := 0; i < b.N; i++ {
    12. s += fmt.Sprintf("%s%s", "hello", "world")
    13. }
    14. fmt.Errorf(s)
    15. }
    16. // 加号 拼接
    17. func BenchmarkAddMore(b *testing.B) {
    18. var s string
    19. for i := 0; i < b.N; i++ {
    20. s += "hello" + "world"
    21. }
    22. fmt.Errorf(s)
    23. }
    24. // strings.Join
    25. func BenchmarkStringsJoinMore(b *testing.B) {
    26. var s string
    27. for i := 0; i < b.N; i++ {
  • 相关阅读:
    Linux 将文件中部分内容替换大小写
    02.CRUD和文件上传下载
    springboot实现webSocket服务端和客户端demo
    git仓库迁移
    Linux项目:文件传输
    古代汉语(王力版)笔记 通论8-9
    孟非、刘震云组团旅行,带你领略《非来不可》的大美中国
    *javaSE 面试题
    Python学习----基础语法2
    ABAP中 delete 语句的使用
  • 原文地址:https://blog.csdn.net/weixin_62421895/article/details/126556346