golang字串拼接方式

2021-09-24 09:12:57 字數 2155 閱讀 4168

字串拼接是字元的常見操作。在golang中,遇見了字串拼接。作為乙個長期的c程式設計師,我第一反應是:字串拼接函式strcat,但發現golang並無字串拼接函式。

我想起了最簡單的方法,通過+操作符進行字串拼接。

但我查了相關資料後發現:golang中的string型別也是唯讀且不可變的;因此,這種拼接字串的方式會導致大量的string建立、銷毀和記憶體分配。如果你拼接的字串比較多的話,這顯然不是乙個正確的姿勢。

然後,查詢一些可行的方法。

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

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

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

(4)strings.builder:golang拼接倡導的方法。

倡導盡量用strings.builder方法,示例如下;     

var build strings.builder

build.writestring("")

build.writestring(dsp.requestid)

build.writestring("&impid=")

build.writestring(dsp.impinfo.impid)

build.writestring("&price=")

fmt.println(build.string())

測試:我自己寫了個程式測試,發現:測試次數越大,fmt.sprintf 的時間差距與strings.builder的差距越大,**如下:

func main()

i := 0

t1 := time.now().unixnano()

for i < 10000000 &extdata=")

build.writestring("&price=")

build.writestring("&extdata=")

build.writestring(dsp.timehour)

build.writestring(strconv.formatint(int64(dsp.miniute), 10))

build.writestring("_")

build.writestring(dsp.mmid)

build.string()

i++}

t2 := time.now().unixnano()

i = 0

t3 := time.now().unixnano()

for i < 10000000 &extdata=%s%d_%s",

"win", dsp.requestid, dsp.impid, dsp.timehour, dsp.miniute,dsp.mmid)

i++}

t4 := time.now().unixnano()

i = 0

t5 := time.now().unixnano()

for i < 10000000 ")

buff.writestring("&extdata=")

buff.writestring(dsp.timehour)

buff.writestring(strconv.formatint(int64(dsp.miniute), 10))

buff.writestring("_")

buff.writestring(dsp.mmid)

buff.string()

i++}

t6 := time.now().unixnano()

fmt.println(t1, "\n", t2, "\n", t3, "\n", t4, "\n", t5, "\n", t6)

fmt.println("delta t1: ", t2 - t1, "\ndelta t2:", t4 - t3, "\ndelta t3:", t6 - t5)

}

Golang 字串拼接

字串拼接應該在程式設計過程中比較常用的操作了,在go語言中對字串的拼接有多種處理方式,以下通過例項來一一講解 這種應該是最直接最簡單的方式了。func stringplus string 複製 執行go test bench benchmem 檢視效能輸出如下 benchmarkstringplus...

golang 幾種字串的拼接方式

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

golang中的字串拼接

由於golang中的字串是不可變的型別,因此用 連線會產生乙個新的字串對效率有影響。這種方式實現的字串拼接過程最簡單,在實際中這種拼接方式在應對少量拼接時,效率還是不錯的。s1 hello s2 world s3 s1 s2 fmt.print s3 s3 helloworld 使用sprintf函...