猿问

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

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


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


 strings.HasSuffix(word, "ed")

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


蛊毒传说
浏览 218回答 2
2回答

DIEA

在 Go v1.0 之前的某个时候,没有rune类型。这就是为什么标准库中的某些处理字符串部分或迭代“字符”的方法将采用字节切片(而不是符文切片)的原因。由于许多方法采用字节切片并避免不断转换为字符串并返回 - 两种类型都存在一些基本功能。

动漫人物

一个重要的答案是性能。在进行诸如此生物信息学任务(此处为最快的 Go 代码)之类的大量字符串处理时,必须使用字节切片 API。Go 1.8 通过优化 ASCII 集的使用进一步改进了字节包。见提交9a8c695由乔·蔡(dsnet)>&nbsp;bytes,&nbsp;strings: 针对 ASCII 集进行优化在 Google 内部的大型代码库中,有数千种用途:ContainsAny|IndexAny|LastIndexAny|Trim|TrimLeft|TrimRight对其使用情况的分析表明,其中超过 97% 的字符集仅使用仅由 ASCII 符号组成的字符集。Uses of ContainsAny|IndexAny|LastIndexAny:&nbsp; &nbsp; &nbsp;6% are 1&nbsp; &nbsp;character&nbsp; (e.g., "\n" or " ")&nbsp; &nbsp; 58% are 2-4 characters (e.g., "<>" or "\r\n\t ")&nbsp; &nbsp; 24% are 5-9 characters (e.g., "()[]*^$")&nbsp; &nbsp; 10% are 10+ characters (e.g., "+-=&|><!(){}[]^\"~*?:\\/ ")我们针对 ASCII 集进行了优化,这些集通常用于在某些字符串中搜索“控制”字符。我们不针对单字符场景进行优化,因为IndexRune或IndexByte可以使用
随时随地看视频慕课网APP

相关分类

Go
我要回答