2 回答

TA貢獻1820條經驗 獲得超3個贊
在 Go v1.0 之前的某個時候,沒有rune
類型。這就是為什么標準庫中的某些處理字符串部分或迭代“字符”的方法將采用字節切片(而不是符文切片)的原因。
由于許多方法采用字節切片并避免不斷轉換為字符串并返回 - 兩種類型都存在一些基本功能。

TA貢獻1815條經驗 獲得超10個贊
一個重要的答案是性能。在進行諸如此生物信息學任務(此處為最快的 Go 代碼)之類的大量字符串處理時,必須使用字節切片 API。
Go 1.8 通過優化 ASCII 集的使用進一步改進了字節包。
> bytes
, strings
: 針對 ASCII 集進行優化
在 Google 內部的大型代碼庫中,有數千種用途:
ContainsAny|IndexAny|LastIndexAny|Trim|TrimLeft|TrimRight
對其使用情況的分析表明,其中超過 97% 的字符集僅使用僅由 ASCII 符號組成的字符集。
Uses of ContainsAny|IndexAny|LastIndexAny:
6% are 1 character (e.g., "\n" or " ")
58% are 2-4 characters (e.g., "<>" or "\r\n\t ")
24% are 5-9 characters (e.g., "()[]*^$")
10% are 10+ characters (e.g., "+-=&|><!(){}[]^\"~*?:\\/ ")
我們針對 ASCII 集進行了優化,這些集通常用于在某些字符串中搜索“控制”字符。我們不針對單字符場景進行優化,因為IndexRune
或IndexByte
可以使用
- 2 回答
- 0 關注
- 249 瀏覽
添加回答
舉報