在字符串上使用字节包有什么好处?

时间:2013-10-18 07:27:32

标签: go

http://play.golang.org/p/CZTmhNepkM

有人可以解释为什么我们需要字节吗?例如,在go playgound上,我正在做同样的事情,但字符串包比使用字节更容易。当我们有字符串包时,为什么有人需要HasSuffix功能的字节包?

 strings.HasSuffix(word, "ed")
 bytes.HasSuffix(word_byte, []byte("ed"))

3 个答案:

答案 0 :(得分:3)

一个重要的答案是表现。在进行大量字符串处理时,例如this bioinformatics task(最快的Go代码here),字节切片API是必须的。

答案 1 :(得分:2)

有些人在Go v1.0之前没有rune类型。这就是为什么标准库中的一些使用字符串部分或迭代“字符”的方法会采用字节切片(而不是符文切片)。

由于许多方法采用字节切片并避免不断转换为字符串和返回 - 两种类型都存在一些基本函数。

答案 2 :(得分:0)

Go 1.8通过优化ASCII集的使用来进一步改进字节包。

commit 9a8c695

Joe Tsai (dsnet)

> bytesstrings:针对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集进行优化,这些ASCII集通常用于搜索&#34;控制&#34;某些字符串中的字符。由于可以使用IndexRuneIndexByte,我们不会对单字符方案进行优化