Golang字串的連線方式

2021-08-31 23:43:10 字數 1435 閱讀 1122

func

benchmarkaddstringwithoperator

(b *testing.b)

}

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

func

benchmarkaddstringwithsprintf

(b *testing.b)

}

內部使用byte實現,不像直接運算子這種會產生很多臨時的字串,但是內部的邏輯比較複雜,有很多額外的判斷,還用到了inte***ce,所以效能也不是很好

func

benchmarkaddstringwithjoin

(b *testing.b)

,",")}

}

join會先根據字串陣列的內容,計算出乙個拼接之後的長度,然後申請對應大小的記憶體,乙個乙個字串填入,在已有乙個陣列的情況下,這種效率會很高,但是本來沒有,去構造這個資料的代價也不小

func

benchmarkaddstringwithbuffer

(b *testing.b)

}

這個比較理想,可以當成可變字元使用,對記憶體的增長也有優化,如果能預估字串的長度,還可以用buffer.grow()介面來設定 capacity

benchmarkaddstringwithoperator-8            50000000             30.3 ns/op

benchmarkaddstringwithsprintf-8 5000000 261 ns/op

benchmarkaddstringwithjoin-8 30000000 58.7 ns/op

benchmarkaddstringwithbuffer-8 2000000000 0.00 ns/op

這個是在我的自己 mac 上面跑的結果,go 版本go version go1.8 darwin/amd64,這個結果僅供參考,還是要以實際生產環境的值為準。

在已有字串陣列的場合,使用 strings.join() 能有比較好的效能

在一些效能要求較高的場合,盡量使用 buffer.writestring() 以獲得更好的效能

效能要求不太高的場合,直接使用運算子,**更簡短清晰,能獲得比較好的可讀性

如果需要拼接的不僅僅是字串,還有數字之類的其他需求的話,可以考慮 fmt.sprintf

golang 幾種字串的連線方式

最近在做效能優化,有個函式裡面的耗時特別長,看裡面的操作大多是一些字串拼接的操作,而字串拼接在 golang 裡面其實有很多種實現。1.直接使用運算子 func benchmarkaddstringwithoperator b testing.b func benchmarkaddmorestrin...

golang字串拼接方式

字串拼接是字元的常見操作。在golang中,遇見了字串拼接。作為乙個長期的c程式設計師,我第一反應是 字串拼接函式strcat,但發現golang並無字串拼接函式。我想起了最簡單的方法,通過 操作符進行字串拼接。但我查了相關資料後發現 golang中的string型別也是唯讀且不可變的 因此,這種拼...

Golang幾種連線字串方法

golang中字串是不可變的使用utf 8編碼任意位元組鏈。把乙個或多個字元相加稱為字串連線。最簡單的方式使用 操作符,本文介紹多種方式連線字串。首先介紹簡單使用 操作符 package main import fmt func main 輸出結果 result hello,golang 既然加操作...