亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 幫助中心 > 正文

Go 高效截取字符串的一些思考

2024-07-09 22:41:07
字體:
來源:轉載
供稿:網友

最近我在Go Forum 中發現了String size of 20 character 的問題,“hollowaykeanho” 給出了相關的答案,而我從中發現了截取字符串的方案并非最理想的方法,因此做了一系列實驗并獲得高效截取字符串的方法,這篇文章將逐步講解我實踐的過程。

字節切片截取

這正是 “hollowaykeanho” 給出的第一個方案,我想也是很多人想到的第一個方案,利用 go 的內置切片語法截取字符串:

s := "abcdef"fmt.Println(s[1:4])

我們很快就了解到這是按字節截取,在處理 ASCII 單字節字符串截取,沒有什么比這更完美的方案了,中文往往占多個字節,在 utf8 編碼中是3個字節,如下程序我們將獲得亂碼數據:

s := "Go 語言"fmt.Println(s[1:4])

殺手锏 - 類型轉換 []rune

“hollowaykeanho” 給出的第二個方案就是將字符串轉換為 []rune,然后按切片語法截取,再把結果轉成字符串。

s := "Go 語言"rs := []rune(s)fmt.Println(strings(rs[1:4]))

首先我們得到了正確的結果,這是最大的進步。不過我對類型轉換一直比較謹慎,我擔心它的性能問題,因此我嘗試在搜索引擎和各大論壇查找答案,但是我得到最多的還是這個方案,似乎這已經是唯一的解。

我嘗試寫個性能測試評測它的性能:

package benchmarkimport (  "testing")var benchmarkSubString = "Go語言是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言。為了方便搜索和識別,有時會將其稱為Golang。"var benchmarkSubStringLength = 20func SubStrRunes(s string, length int) string {  if utf8.RuneCountInString(s) > length {    rs := []rune(s)    return string(rs[:length])  }  return s}func BenchmarkSubStrRunes(b *testing.B) {  for i := 0; i < b.N; i++ {    SubStrRunes(benchmarkSubString, benchmarkSubStringLength)  }}

我得到了讓我有些吃驚的結果:

goos: darwingoarch: amd64pkg: github.com/thinkeridea/go-extend/exunicode/exutf8/benchmarkBenchmarkSubStrRunes-8      872253       1363 ns/op       336 B/op     2 allocs/opPASSok   github.com/thinkeridea/go-extend/exunicode/exutf8/benchmark   2.120s

對 69 個的字符串截取前 20 個字符需要大概 1.3 微秒,這極大的超出了我的心里預期,我發現因為類型轉換帶來了內存分配,這產生了一個新的字符串,并且類型轉換需要大量的計算。

救命稻草 - utf8.DecodeRuneInString

我想改善類型轉換帶來的額外運算和內存分配,我仔細的梳理了一遍 strings 包,發現并沒有相關的工具,這時我想到了 utf8 包,它提供了多字節計算相關的工具,實話說我對它并不熟悉,或者說沒有主動(直接)使用過它,我查看了它所有的文檔發現 utf8.DecodeRuneInString 函數可以轉換單個字符,并給出字符占用字節的數量,我嘗試了如此下的實驗:

package benchmarkimport (  "testing"  "unicode/utf8")var benchmarkSubString = "Go語言是Google開發的一種靜態強類型、編譯型、并發型,并具有垃圾回收功能的編程語言。為了方便搜索和識別,有時會將其稱為Golang。"var benchmarkSubStringLength = 20func SubStrDecodeRuneInString(s string, length int) string {  var size, n int  for i := 0; i < length && n < len(s); i++ {    _, size = utf8.DecodeRuneInString(s[n:])    n += size  }  return s[:n]}func BenchmarkSubStrDecodeRuneInString(b *testing.B) {  for i := 0; i < b.N; i++ {    SubStrDecodeRuneInString(benchmarkSubString, benchmarkSubStringLength)  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区在线播放| 成人乱人伦精品视频在线观看| 午夜免费久久久久| 国产日本欧美一区二区三区在线| 成人国产精品一区| 日本在线精品视频| 亚洲国产私拍精品国模在线观看| 国产精品一区二区久久久久| 欧美成人午夜激情| 久久偷看各类女兵18女厕嘘嘘| 亚洲国产精品99| 日韩av黄色在线观看| 国产亚洲激情视频在线| 国产精品久久精品| 亚洲欧美另类人妖| 91影视免费在线观看| 亚洲精选在线观看| 日韩在线小视频| 国产偷亚洲偷欧美偷精品| 青青久久av北条麻妃海外网| 中文字幕在线视频日韩| 日韩三级成人av网| 中文字幕免费国产精品| 尤物99国产成人精品视频| 91夜夜揉人人捏人人添红杏| 97视频在线观看成人| 欧美理论片在线观看| 亚洲天堂av在线免费| 欧美电影免费看| 久久精品人人爽| 在线观看日韩www视频免费| 久久人人爽人人| 亚洲无限av看| 日韩免费视频在线观看| 亚洲精品视频中文字幕| 日本一区二区三区四区视频| 久久男人资源视频| 欧美第一淫aaasss性| 日韩在线播放一区| 一本色道久久88综合日韩精品| 欲色天天网综合久久| 精品久久久久久久大神国产| 91探花福利精品国产自产在线| 亚洲欧美日韩国产成人| 日韩中文视频免费在线观看| 国产成人一区二区三区| 伊人伊成久久人综合网站| 久久在精品线影院精品国产| 亚洲色图在线观看| 中文字幕亚洲在线| 成人国产精品色哟哟| 亚洲精品资源美女情侣酒店| 精品在线观看国产| 亚洲欧美日韩一区在线| 亚洲aa中文字幕| 久久综合久久八八| 精品视频在线导航| 欧美日本国产在线| 2019中文字幕全在线观看| 欧美日韩国产中文字幕| 久久精品亚洲国产| 日韩av第一页| 最近中文字幕mv在线一区二区三区四区| 国模私拍一区二区三区| 国产精品成人aaaaa网站| 97国产成人精品视频| 69av视频在线播放| 中文字幕亚洲色图| 国产精品揄拍一区二区| 隔壁老王国产在线精品| 亚洲精品中文字幕av| 日韩中文字幕在线视频| 亚洲乱码一区av黑人高潮| 成人欧美在线观看| 久久精品视频在线| 日韩成人av网址| 青青在线视频一区二区三区| 日本成人黄色片| 国产日韩欧美一二三区| 欧美亚洲国产精品| 国产精品久久久久久久久久久新郎| 海角国产乱辈乱精品视频| 精品中文字幕在线2019| 中文字幕v亚洲ⅴv天堂| 亚洲www永久成人夜色| 国产精品国产三级国产专播精品人| 久久99国产精品久久久久久久久| 欧美国产日韩二区| 国产精品久久久久久久久久三级| 国产精品99久久久久久人| 欧美高清第一页| 欧美成人精品一区二区| 一本一道久久a久久精品逆3p| 国产精品网站大全| 91国偷自产一区二区三区的观看方式| 欧美国产日韩在线| 亚洲人成欧美中文字幕| 国产精品美女久久| 国产亚洲精品综合一区91| 亚洲国产精品va| 91高潮在线观看| 日韩欧美中文字幕在线观看| 亚洲图片欧美午夜| 久久综合亚洲社区| 国产精品成av人在线视午夜片| 国产日韩综合一区二区性色av| 亚洲欧洲偷拍精品| 日韩电视剧免费观看网站| 国内精品久久久久伊人av| 欧美电影免费看| 国产亚洲a∨片在线观看| 国产日产欧美a一级在线| 国产精品久久久久99| 久久久久久久久中文字幕| 不用播放器成人网| 国产精品v片在线观看不卡| 亚洲片在线观看| 精品一区二区三区四区| www亚洲欧美| 最近2019中文字幕大全第二页| 91久久夜色精品国产网站| 91福利视频在线观看| 国产精品福利在线观看| 亚洲欧美资源在线| 国产精品一区二区久久国产| 亚洲第一免费播放区| 亚洲成色www8888| 国产精品aaa| 亚洲精品资源美女情侣酒店| 欧美激情精品久久久久久| 亚洲国产高清高潮精品美女| 亚洲97在线观看| 国产精品偷伦视频免费观看国产| 亚洲精品v欧美精品v日韩精品| 黄色一区二区在线观看| 91九色国产社区在线观看| www.亚洲一区| 久久69精品久久久久久久电影好| 日韩人体视频一二区| 日本高清久久天堂| 51ⅴ精品国产91久久久久久| 亚洲欧洲国产伦综合| 国产最新精品视频| 亚洲精品久久久久久久久| 亚洲国产精品女人久久久| 日韩一区在线视频| 一区二区三区久久精品| 日韩精品一区二区视频| 色诱女教师一区二区三区| 久久久亚洲国产天美传媒修理工| 成人精品视频99在线观看免费| 久久影视电视剧免费网站清宫辞电视| 亚洲网站在线播放| 尤物99国产成人精品视频| 亚洲成人黄色在线| 亚洲欧美日韩在线高清直播| 亚洲最大的av网站| 91国内揄拍国内精品对白| 亚洲一区二区精品| 国色天香2019中文字幕在线观看| 久久精品一偷一偷国产| 欧美国产在线电影| 97视频免费看| 国产精品天天狠天天看|