http://play.golang.org/p/CZTmhNepkM有人可以解释为什么我们需要字节吗?例如,在 go playgound 中,我正在做同样的事情,但字符串包比字节更容易使用。当我们有字符串包时,为什么有人需要字节包来实现 HasSuffix 功能? strings.HasSuffix(word, "ed") bytes.HasSuffix(word_byte, []byte("ed"))
2 回答
DIEA
TA贡献1820条经验 获得超2个赞
在 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 关注
- 217 浏览
添加回答
举报
0/150
提交
取消