Go 语言的标准库 bytes 包提供了一组用于操作字节切片 ([]byte) 的函数。这个包中的函数与 strings 包中的函数非常类似,但它们操作的是字节切片,而不是字符串。字节切片在 Go 语言中是一种非常重要的数据类型,广泛用于处理二进制数据和文本数据。bytes 包提供了很多处理字节切片的工具,包括但不限于查找、比较、切分、连接、替换、转换等操作。

1. 查找和比较

  • func Compare(a, b []byte) int: 比较两个字节切片,类似于 strings.Compare。如果 ab 小,返回 -1;如果相等,返回 0;如果 ab 大,返回 1。
  • func Contains(b, subslice []byte) bool: 判断字节切片 b 是否包含 subslice
  • func ContainsAny(b []byte, chars string) bool: 判断字节切片 b 是否包含字符串 chars 中的任意一个字符。
  • func ContainsRune(b []byte, r rune) bool: 判断字节切片 b 是否包含 Unicode 字符 r
  • func Count(b, sep []byte) int: 计算 sepb 中出现的次数。
  • func Equal(a, b []byte) bool: 判断两个字节切片是否相等。
  • func EqualFold(s, t []byte) bool: 判断两个字节切片在忽略大小写的情况下是否相等。
  • func Index(b, sep []byte) int: 返回 sepb 中第一次出现的位置索引,如果未找到则返回 -1。
  • func IndexAny(b []byte, chars string) int: 返回 chars 中任意一个字符在 b 中第一次出现的位置索引,如果未找到则返回 -1。
  • func IndexByte(b []byte, c byte) int: 返回 cb 中第一次出现的位置索引。
  • func IndexRune(b []byte, r rune) int: 返回 rb 中第一次出现的位置索引。
  • func LastIndex(b, sep []byte) int: 返回 sepb 中最后一次出现的位置索引。
  • func LastIndexAny(b []byte, chars string) int: 返回 chars 中任意一个字符在 b 中最后一次出现的位置索引。
  • func LastIndexByte(b []byte, c byte) int: 返回 cb 中最后一次出现的位置索引。

2. 修改

  • func Replace(s, old, new []byte, n int) []byte: 返回一个新的字节切片,其中 s 中的前 nold 被替换为 new。如果 n 为 -1,则替换所有出现的 old
  • func Map(mapping func(r rune) rune, s []byte) []byte: 返回一个新的字节切片,其中 s 中的每个字符被 mapping 函数转换。
  • func ToLower(s []byte) []byte: 将字节切片中的所有字符转换为小写。
  • func ToUpper(s []byte) []byte: 将字节切片中的所有字符转换为大写。
  • func ToTitle(s []byte) []byte: 将字节切片中的所有字符转换为标题格式。
  • func Trim(s []byte, cutset string) []byte: 去除 s 开头和结尾处的 cutset 中的字符。
  • func TrimFunc(s []byte, f func(r rune) bool) []byte: 去除 s 开头和结尾处满足函数 f 的字符。
  • func TrimSpace(s []byte) []byte: 去除 s 开头和结尾的空白字符。
  • func TrimPrefix(s, prefix []byte) []byte: 去除 s 的前缀 prefix
  • func TrimSuffix(s, suffix []byte) []byte: 去除 s 的后缀 suffix

3. 切分和拼接

  • func Split(s, sep []byte) [][]byte: 将字节切片 s 按照分隔符 sep 切分,返回一个切片的切片。如果 sep 为空,则将 s 每个字节切分。
  • func SplitN(s, sep []byte, n int) [][]byte: 将 ssep 切分成最多 n 个子切片。
  • func SplitAfter(s, sep []byte) [][]byte: 类似于 Split,但保留分隔符。
  • func SplitAfterN(s, sep []byte, n int) [][]byte: 类似于 SplitN,但保留分隔符。
  • func Join(s [][]byte, sep []byte) []byte: 将多个子字节切片连接为一个字节切片,使用 sep 作为分隔符。

4. 转换

  • func NewReader(b []byte) *Reader: 返回一个新的 Reader,从字节切片 b 读取数据。
  • func Repeat(b []byte, count int) []byte: 返回一个新的字节切片,其中 b 重复 count 次。
  • func Runes(s []byte) []rune: 将字节切片 s 转换为 Unicode 字符切片。
  • func ToValidUTF8(s, replacement []byte) []byte: 将字节切片 s 中无效的 UTF-8 字符替换为 replacement

5. 缓冲区操作

bytes.Buffer 类型提供了一个用于高效地读写字节的缓冲区。

  • func (b *Buffer) Bytes() []byte: 返回缓冲区中的字节切片。
  • func (b *Buffer) String() string: 返回缓冲区中的数据作为字符串。
  • func (b *Buffer) Write(p []byte) (n int, err error): 将字节切片 p 写入缓冲区。
  • func (b *Buffer) WriteString(s string) (n int, err error): 将字符串 s 写入缓冲区。
  • func (b *Buffer) WriteByte(c byte) error: 将单个字节写入缓冲区。
  • func (b *Buffer) WriteRune(r rune) (n int, err error): 将单个 Unicode 字符写入缓冲区。
  • func (b *Buffer) Read(p []byte) (n int, err error): 从缓冲区读取数据到字节切片 p
  • func (b *Buffer) ReadByte() (byte, error): 读取单个字节。
  • func (b *Buffer) ReadRune() (r rune, size int, err error): 读取单个 Unicode 字符。
  • func (b *Buffer) Next(n int) []byte: 返回缓冲区中的前 n 个字节,并将它们从缓冲区中移除。

6. Reader

bytes.Reader 是另一个重要类型,它允许从字节切片读取数据。它的主要功能是实现了 io.Readerio.ReaderAtio.WriterToio.Seekerio.ByteScannerio.RuneScanner 等接口。

  • func (r *Reader) Len() int: 返回未读部分的长度。
  • func (r *Reader) Size() int64: 返回 Reader 的长度。
  • func (r *Reader) Read(b []byte) (n int, err error): 将数据从 Reader 读入字节切片 b
  • func (r *Reader) ReadAt(b []byte, off int64) (n int, err error): 从 Reader 的指定位置开始读数据。
  • func (r *Reader) ReadByte() (byte, error): 读取一个字节。
  • func (r *Reader) ReadRune() (r rune, size int, err error): 读取一个 Unicode 字符。
  • func (r *Reader) Seek(offset int64, whence int) (int64, error): 移动 Reader 的读取位置。

孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特