前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go标准库:bytes

Go标准库:bytes

原创
作者头像
孟斯特
发布2024-08-09 16:37:24
970
发布2024-08-09 16:37:24
举报
文章被收录于专栏:Go学习

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 的读取位置。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 查找和比较
  • 2. 修改
  • 3. 切分和拼接
  • 4. 转换
  • 5. 缓冲区操作
  • 6. Reader
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档