🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 2.2 bytes — byte slice 便利操作 # 该包定义了一些操作 byte slice 的便利操作。因为字符串可以表示为 []byte,因此,bytes 包定义的函数、方法等和 strings 包很类似,所以讲解时会和 strings 包类似甚至可以直接参考。 说明:为了方便,会称呼 []byte 为 字节数组 ## 2.2.1 是否存在某个子slice // 子slice subslice 在 b 中,返回 true func Contains(b, subslice []byte) bool 该函数的内部调用了 bytes.Index 函数(在后面会讲解): func Contains(b, subslice []byte) bool { return Index(b, subslice) != -1 } 题外:对比 `strings.Contains` 你会发现,一个判断 `>=0`,一个判断 `!= -1`,可见库不是一个人写的,没有做到一致性。 ## 2.2.2 []byte 出现次数 ## // slice sep 在 s 中出现的次数(无重叠) func Count(s, sep []byte) int 和 strings 实现不同,此包中的 Count 核心代码如下: count := 0 c := sep[0] i := 0 t := s[:len(s)-n+1] for i < len(t) { // 判断 sep 第一个字节是否在 t[i:] 中 // 如果在,则比较之后相应的字节 if t[i] != c { o := IndexByte(t[i:], c) if o < 0 { break } i += o } // 执行到这里表示 sep[0] == t[i] if n == 1 || Equal(s[i:i+n], sep) { count++ i += n continue } i++ } ## 2.2.3 - 7 参见 strings 包对应的部分 ## ## 2.2.4 ## # 导航 # - 上一节:[strings — 字符串操作](02.1.md) - 下一节:[strconv — 字符串和基本数据类型之间转换](02.3.md)