最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)使用不同的拼接方法,在一些簡(jiǎn)單的拼接字符串里使用加號(hào)簡(jiǎn)單高效,在復(fù)雜的拼接場(chǎng)景推薦strings.Builder和bytes.Buffer。

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

相關(guān)文章

  • 一篇文章帶你搞懂Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)Time

    一篇文章帶你搞懂Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)Time

    在我們開(kāi)發(fā)的過(guò)程中,每個(gè)項(xiàng)目都需要時(shí)間這一類(lèi)的函數(shù),此時(shí)對(duì)time這個(gè)包的研究深度就顯得尤為重要,這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章帶你搞懂Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)Time的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 淺析Go語(yǔ)言如何避免數(shù)據(jù)競(jìng)爭(zhēng)Data?Race和競(jìng)態(tài)條件Race?Condition

    淺析Go語(yǔ)言如何避免數(shù)據(jù)競(jìng)爭(zhēng)Data?Race和競(jìng)態(tài)條件Race?Condition

    在并發(fā)編程中,數(shù)據(jù)競(jìng)爭(zhēng)?(Data?Race)?和?競(jìng)態(tài)條件?(Race?Condition)?是兩個(gè)常見(jiàn)的問(wèn)題,本文將簡(jiǎn)單介紹一下二者如何避免,有需要的可以了解下
    2025-01-01
  • golang使用tail實(shí)現(xiàn)追蹤文件變更

    golang使用tail實(shí)現(xiàn)追蹤文件變更

    這篇文章主要為大家介紹了golang如何借助 github.com/hpcloud/tail ,實(shí)現(xiàn)實(shí)時(shí)追蹤文件變更,達(dá)到類(lèi)似shell命令tail -f的效果,感興趣的小伙伴可以了解一下
    2023-08-08
  • Golang switch語(yǔ)句的具體使用

    Golang switch語(yǔ)句的具體使用

    switch 語(yǔ)句提供了一種簡(jiǎn)潔的方式來(lái)執(zhí)行多路分支選擇,本文主要介紹了Golang switch語(yǔ)句的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • 淺析go中Ticker,Timer和Tick的用法與區(qū)別

    淺析go中Ticker,Timer和Tick的用法與區(qū)別

    在go面試的時(shí)候,面試官經(jīng)常會(huì)問(wèn)time包的Ticker,Timer以及Tick的區(qū)別,一般在超時(shí)控制的時(shí)候用的比較多,今天就跟隨小編一起來(lái)詳細(xì)學(xué)一下這幾個(gè)的區(qū)別吧
    2023-10-10
  • Go解決死鎖(Deadlock)問(wèn)題及解決方案

    Go解決死鎖(Deadlock)問(wèn)題及解決方案

    在Go語(yǔ)言的并發(fā)編程中,死鎖(Deadlock)是一種極其隱蔽且致命的錯(cuò)誤,它就像是一場(chǎng)交通堵塞,所有車(chē)輛都在等待,本文就來(lái)詳細(xì)的介紹一下死鎖問(wèn)題解決,感興趣的可以了解一下
    2026-04-04
  • Go 實(shí)現(xiàn)一次性打包各個(gè)平臺(tái)的可執(zhí)行程序

    Go 實(shí)現(xiàn)一次性打包各個(gè)平臺(tái)的可執(zhí)行程序

    這篇文章主要介紹了Go 實(shí)現(xiàn)一次性打包各個(gè)平臺(tái)的可執(zhí)行程序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Gin 路由與路由文件分組的實(shí)現(xiàn)實(shí)例

    Gin 路由與路由文件分組的實(shí)現(xiàn)實(shí)例

    本文主要介紹了Gin 路由與路由文件分組的實(shí)現(xiàn)實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 詳解Golang中零拷貝的原理以及實(shí)踐

    詳解Golang中零拷貝的原理以及實(shí)踐

    零拷貝技術(shù)相信大家都有所耳聞,但是本文不僅會(huì)講述零拷貝技術(shù)的原理,并將從實(shí)際代碼出發(fā),看看零拷貝技術(shù)在golang中的應(yīng)用,現(xiàn)在讓我們開(kāi)始吧
    2023-07-07
  • Go語(yǔ)言七篇入門(mén)教程三函數(shù)方法及接口

    Go語(yǔ)言七篇入門(mén)教程三函數(shù)方法及接口

    這篇文章主要為大家介紹了Go語(yǔ)言的函數(shù)方法及接口的示例詳解,本文是Go語(yǔ)言七篇入門(mén)系列文章,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11

最新評(píng)論

景德镇市| 桂阳县| 仲巴县| 松潘县| 宁陕县| 玉树县| 西吉县| 镶黄旗| 麦盖提县| 枣强县| 洛阳市| 陇川县| 北流市| 工布江达县| 雅安市| 合肥市| 集贤县| 甘孜县| 白城市| 正蓝旗| 宜州市| 灵山县| 商水县| 苍南县| 岑巩县| 无极县| 南昌市| 肇庆市| 旌德县| 西吉县| 法库县| 贵溪市| 涪陵区| 陇南市| 松滋市| 来宾市| 仁布县| 隆子县| 贵南县| 大冶市| 周宁县|