http://play.golang.org/p/CZTmhNepkM
有人可以解释为什么我们需要字节吗?例如,在go playgound上,我正在做同样的事情,但字符串包比使用字节更容易。当我们有字符串包时,为什么有人需要HasSuffix功能的字节包?
strings.HasSuffix(word, "ed")
bytes.HasSuffix(word_byte, []byte("ed"))
答案 0 :(得分:3)
一个重要的答案是表现。在进行大量字符串处理时,例如this bioinformatics task(最快的Go代码here),字节切片API是必须的。
答案 1 :(得分:2)
有些人在Go v1.0之前没有rune
类型。这就是为什么标准库中的一些使用字符串部分或迭代“字符”的方法会采用字节切片(而不是符文切片)。
由于许多方法采用字节切片并避免不断转换为字符串和返回 - 两种类型都存在一些基本函数。
答案 2 :(得分:0)
Go 1.8通过优化ASCII集的使用来进一步改进字节包。
见Joe Tsai (dsnet
)
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集进行优化,这些ASCII集通常用于搜索&#34;控制&#34;某些字符串中的字符。由于可以使用
IndexRune
或IndexByte
,我们不会对单字符方案进行优化