为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蛊毒传说 2021-07-02 14:53:08
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类型。这就是为什么标准库中的某些处理字符串部分或迭代“字符”的方法将采用字节切片(而不是符文切片)的原因。

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


查看完整回答
反对 回复 2021-07-05
?
动漫人物

TA贡献1815条经验 获得超10个赞

一个重要的答案是性能。在进行诸如此生物信息学任务此处为最快的 Go 代码)之类的大量字符串处理时,必须使用字节切片 API。

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

提交9a8c695乔·蔡(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 集进行了优化,这些集通常用于在某些字符串中搜索“控制”字符。我们不针对单字符场景进行优化,因为IndexRuneIndexByte可以使用

查看完整回答
反对 回复 2021-07-05
  • 2 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信