欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang?字符串拼接方法對(duì)比分析

 更新時(shí)間:2023年09月04日 10:51:59   作者:guyan0319  
這篇文章主要為大家介紹了golang?字符串拼接方法對(duì)比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

字符串拼接

字符串拼接有以下幾種方法

  • 加號(hào)+
  • fmt.Sprintf
  • strings.Join
  • bytes.Buffer
  • strings.Builder 此方法為官方推薦

新建單元測(cè)試文件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())
    }
}

執(zhí)行

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

結(jié)果:

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
執(zhí)行效率排序+>join>fmt.Sprintf>strings.Builder>bytes.Buffer

新建單元測(cè)試文件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())
}

執(zhí)行

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

結(jié)果:

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
執(zhí)行效率排序:strings.Builder>bytes.Buffer>加號(hào)
且strings.Builder和bytes.Buffer分配內(nèi)存大小和次數(shù),要比加號(hào)效率更好

總結(jié)

由此可知在不同的使用場(chǎng)景,應(yīng)使用不同的拼接方法,在一些簡單的拼接字符串里使用加號(hào)簡單高效,在復(fù)雜的拼接場(chǎng)景推薦strings.Builder和bytes.Buffer。

以上就是golang 字符串拼接方法對(duì)比分析的詳細(xì)內(nèi)容,更多關(guān)于golang 字符串拼接的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go?tool?pprof?參數(shù)?'-base'?和?'-diff_base'之間的區(qū)別解析

    go?tool?pprof?參數(shù)?'-base'?和?'-diff_base&

    這篇文章主要介紹了go?tool?pprof?參數(shù)?'-base'?和?'-diff_base'之間的區(qū)別,兩個(gè)參數(shù)都是用于計(jì)算當(dāng)前?profile文件減去基準(zhǔn)profile文件所獲得的差值,用這個(gè)差值生成一個(gè)新的profile文件,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Go語言多值替換的HTML模板實(shí)例分析

    Go語言多值替換的HTML模板實(shí)例分析

    這篇文章主要介紹了Go語言多值替換的HTML模板,實(shí)例分析了Go語言多值替換與數(shù)組迭代的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Golang使用Swag搭建api文檔的全過程

    Golang使用Swag搭建api文檔的全過程

    Gin是Golang目前最為常用的Web框架之一,公司項(xiàng)目驗(yàn)收需要API接口設(shè)計(jì)說明書(Golang后端服務(wù)基于Gin框架編寫),所以本文給大家介紹了Golang使用Swag搭建api文檔的全過程,需要的朋友可以參考下
    2024-02-02
  • Go語言實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互轉(zhuǎn)的示例代碼

    Go語言實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互轉(zhuǎn)的示例代碼

    這篇文章主要和大家詳細(xì)介紹了Go語言中實(shí)現(xiàn)二進(jìn)制與十進(jìn)制互相轉(zhuǎn)換的示例代碼,文中的代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • go語言中的map如何解決散列性能下降

    go語言中的map如何解決散列性能下降

    近期對(duì)go語言的map進(jìn)行深入了解和探究,其中關(guān)于map解決大量沖突的擴(kuò)容操作設(shè)計(jì)的十分巧妙,所以筆者特地整理了這篇文章來探討一下go語言中map如何解決散列性能下降,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • golang 將[]byte轉(zhuǎn)成16進(jìn)制的實(shí)現(xiàn)

    golang 將[]byte轉(zhuǎn)成16進(jìn)制的實(shí)現(xiàn)

    這篇文章主要介紹了golang 將[]byte轉(zhuǎn)成16進(jìn)制的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語言實(shí)現(xiàn)簡單的一個(gè)靜態(tài)WEB服務(wù)器

    Go語言實(shí)現(xiàn)簡單的一個(gè)靜態(tài)WEB服務(wù)器

    這篇文章主要介紹了Go語言實(shí)現(xiàn)簡單的一個(gè)靜態(tài)WEB服務(wù)器,本文給出了實(shí)現(xiàn)代碼和運(yùn)行效果,學(xué)習(xí)Golang的練手作品,需要的朋友可以參考下
    2014-10-10
  • Go1.21新增slices包的用法詳解

    Go1.21新增slices包的用法詳解

    Go?1.21新增的?slices?包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,這篇文章主要來和大家介紹一下slices包中相關(guān)函數(shù)的用法,需要的可以參考一下
    2023-08-08
  • go mod 使用私有g(shù)itlab群組的解決方案

    go mod 使用私有g(shù)itlab群組的解決方案

    這篇文章主要介紹了go mod 使用私有g(shù)itlab群組的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 使用go的interface案例實(shí)現(xiàn)多態(tài)范式操作

    使用go的interface案例實(shí)現(xiàn)多態(tài)范式操作

    這篇文章主要介紹了使用go的interface案例實(shí)現(xiàn)多態(tài)范式操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評(píng)論