4

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

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

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

3 回答 3

3

一个重要的答案是性能。在进行大规模字符串处理时,例如这个生物信息学任务(这里是最快的 Go 代码),字节切片 API 是必须的。

于 2013-10-18T07:54:36.437 回答
2

在 Go v1.0 之前的某个时候,没有rune类型。这就是为什么标准库中的某些处理部分字符串或迭代“字符”的方法将采用字节切片(而不是符文切片)。

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

于 2013-10-18T07:49:20.027 回答
0

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

请参阅Joe Tsai ( )提交 9a8c695dsnet

> 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可以使用

于 2016-10-29T08:49:21.513 回答