一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Golang - go語言中五種字符串的拼接方式(小結)

go語言中五種字符串的拼接方式(小結)

2022-01-21 00:42kuteng Golang

字符串拼接在 golang 里面其實有很多種實現,本文就詳細的介紹一下go語言中五種字符串的拼接方式以及性能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

+拼接方式

這種方式是我在寫golang經常用的方式,go語言用+拼接,php使用.拼接,不過由于golang中的字符串是不可變的類型,因此用 + 連接會產生一個新的字符串對效率有影響。

?
1
2
3
4
5
6
func main() {
    s1 := "hello"
    s2 := "word"
    s3 := s1 + s2
    fmt.Print(s3) //s3 = "helloword"
}

sprintf函數

?
1
2
3
s1 := "hello"
s2 := "word"
s3 := fmt.Sprintf("%s%s", s1, s2) //s3 = "helloword"

這種方式也是開發過程中經常使用到的,這樣寫的好處就是不會直接產生臨時字符串,但是效率好像也是不是特別高。

Join函數

使用Join函數我們需要先引入strings包才能調用Join函數。Join函數會先根據字符串數組的內容,計算出一個拼接之后的長度,然后申請對應大小的內存,一個一個字符串填入,在已有一個數組的情況下,這種效率會很高,如果沒有的話效率也不高。我一般用來切片轉字符串使用。

?
1
2
3
4
5
s1 := "hello"
s2 := "word"
var str []string = []string{s1, s2}
s3 := strings.Join(str, "")
fmt.Print(s3)

buffer.Builderbuffer.WriteString函數

?
1
2
3
4
5
6
7
s1 := "hello"
s2 := "word"
var bt bytes.Buffer
bt.WriteString(s1)
bt.WriteString(s2)
s3 := bt.String()
fmt.Println(s3)

效率比上面的高不少但是我在開發中基本上沒有用過。

buffer.Builder函數

?
1
2
3
4
5
6
7
s1 := "hello"
s2 := "word"
var build strings.Builder
build.WriteString(s1)
build.WriteString(s2)
s3 := build.String()
fmt.Println(s3)

官方建議使用的的拼接方式,和上面的使用方法差不多,官方建議是官方的我是小白只喜歡第一種,所以一般情況下我都是用+拼接,如果拼接的字符串比較長的話就是最后一種方式了,畢竟保命要緊。

ps:直接使用運算符

?
1
2
3
4
5
6
7
func BenchmarkAddStringWithOperator(b *testing.B) {
    hello := "hello"
    world := "world"
    for i := 0; i < b.N; i++ {
        _ = hello + "," + world
    }
}

golang 里面的字符串都是不可變的,每次運算都會產生一個新的字符串,所以會產生很多臨時的無用的字符串,不僅沒有用,還會給 gc 帶來額外的負擔,所以性能比較差

主要結論

  • 在已有字符串數組的場合,使用 strings.Join() 能有比較好的性能
  • 在一些性能要求較高的場合,盡量使用 buffer.WriteString() 以獲得更好的性能
  • 性能要求不太高的場合,直接使用運算符,代碼更簡短清晰,能獲得比較好的可讀性
  • 如果需要拼接的不僅僅是字符串,還有數字之類的其他需求的話,可以考慮 fmt.Sprintf()

到此這篇關于go語言中五種字符串的拼接方式(小結)的文章就介紹到這了,更多相關go語言字符串拼接內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.topgoer.cn/blog-35.html

延伸 · 閱讀

精彩推薦
  • Golanggolang如何使用struct的tag屬性的詳細介紹

    golang如何使用struct的tag屬性的詳細介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細介紹,從例子說起,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看...

    Go語言中文網11352020-05-21
  • GolangGolang通脈之數據類型詳情

    Golang通脈之數據類型詳情

    這篇文章主要介紹了Golang通脈之數據類型,在編程語言中標識符就是定義的具有某種意義的詞,比如變量名、常量名、函數名等等,Go語言中標識符允許由...

    4272021-11-24
  • GolangGolang中Bit數組的實現方式

    Golang中Bit數組的實現方式

    這篇文章主要介紹了Golang中Bit數組的實現方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨尊11682021-06-09
  • Golanggo日志系統logrus顯示文件和行號的操作

    go日志系統logrus顯示文件和行號的操作

    這篇文章主要介紹了go日志系統logrus顯示文件和行號的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggolang json.Marshal 特殊html字符被轉義的解決方法

    golang json.Marshal 特殊html字符被轉義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉義的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • Golanggolang的httpserver優雅重啟方法詳解

    golang的httpserver優雅重啟方法詳解

    這篇文章主要給大家介紹了關于golang的httpserver優雅重啟的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    helight2992020-05-14
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
主站蜘蛛池模板: 99视频都是精品热在线播放 | 亚洲一区二区三区福利在线 | bdsm酷刑折磨死美女 | 短篇艳妇系列 | 久久艹综合 | 午夜家庭影院 | 91在线视频导航 | 欠操h| 福利一区在线观看 | www.日本黄色| 无遮18禁在线永久免费观看挡 | 亚洲乱亚洲23p女 | 隔壁的漂亮邻居hd中文 | 国产色婷婷亚洲 | 国产精品第四页 | 成人18视频在线观看 | 成人精品一区久久久久 | 日本高清免费中文字幕不卡 | 18岁的老处女 | 纲手被鸣人插 | 女王调奴丨vk | 日韩一级片在线观看 | 久久亚洲精品成人 | freefron性中国国产高清 | 精品欧美日韩一区二区三区 | 亚洲va国产日韩欧美精品色婷婷 | 调教校花浣肠开菊 | 日本人泡妞xxxxxx69 | 含羞草传媒一天免费看下 | 天堂69亚洲精品中文字幕 | 国产乱子伦一区二区三区 | 黄动漫软件车车好快的车车 | 99久久无色码中文字幕 | 成年女人毛片免费观看97 | 香蕉eeww99国产精品 | 国产精品www | 91看片淫黄大片欧美看国产片 | 久久免费看少妇高潮A片2012 | 男人狂躁女人下面的视频免费 | 美女班主任让我爽了一夜视频 | 国产精品视频一区二区三区不卡 |