对于传入 []byte 的函数,都不会修改传入的参数,返回值要么是参数的副本,要么是参数的切片。
判断包含关系
func HasPrefix(s, prefix []bytes) bool 判断s是否有前缀prefix。
func HasSuffix(s, suffix []bytes) bool 判断s是否有后缀suffix。
func Contains(s, substr []bytes) bool 判断s是否包含子串substr。
func ContainsRune(s []bytes, r rune) bool 判断s是否包含utf-8码值r。
func ContainsAny(s, chars []bytes) bool 判断s是否包含chars中的任一字符。
比较
- 比较两个 []byte,nil 参数相当于空 []byte。
- a < b 返回 -1
- a == b 返回 0
- a > b 返回 1
func ToLower(s []bytes) []bytes 返回将所有字母都转为对应的小写版本。
func ToLowerSpecial(_case unicode.SpecialCase, s []bytes) []bytes 使用_case规定的字符映射,返回将所有字母都转为对应的小写版本。
func ToUpper(s []bytes) []bytes 返回将所有字母都转为对应的大写版本。
func ToUpperSpecial(_case unicode.SpecialCase, s []bytes) []bytes · 使用_case规定的字符映射,返回将所有字母都转为对应的大写版本
func ToTitle(s []bytes) []bytes 返回将所有字母都转为对应的标题版本
func ToTitleSpecial(_case unicode.SpecialCase, s []bytes) []bytes 使用_case规定的字符映射,返回将所有字母都转为对应的标题版本
清理
注意:共用底层数组
func Trim(s []byte, cutset string) []byte 返回将s前后端所有cutset包含的unicode码值都去掉的子切片。
func TrimSpace(s []byte) []byte 返回将s前后端所有空白(unicode.IsSpace指定)都去掉的子切片。
func TrimFunc(s []byte, f func(r rune) bool) []byte 返回将s前后端所有满足f的unicode码值都去掉的子切片。
func TrimLeft(s []byte, cutset string) []byte 返回将s前端所有cutset包含的unicode码值都去掉的子切片。
func TrimLeftFunc(s []byte, f func(r rune) bool) []byte 返回将s前端所有满足f的unicode码值都去掉的子切片。
func TrimPrefix(s, prefix []byte) []byte 返回去除s可能的前缀prefix的子切片。
func TrimRight(s []byte, cutset string) []byte 返回将s后端所有cutset包含的unicode码值都去掉的子切片。
func TrimRightFunc(s []byte, f func(r rune) bool) []byte 返回将s后端所有满足f的unicode码值都去掉的子切片。
func TrimSuffix(s, suffix []byte) []byte 返回去除s可能的后缀suffix的子切片。
子串
func Count(s, sep []byte) int Count计算s中有多少个不重叠的sep子切片。
func Index(s, sep []byte) int 子切片sep在s中第一次出现的位置,不存在则返回-1。
func IndexByte(s []byte, c byte) int 字符c在s中第一次出现的位置,不存在则返回-1。
func IndexRune(s []byte, r rune) int unicode字符r的utf-8编码在s中第一次出现的位置,不存在则返回-1。
func IndexAny(s []byte, chars string) int 字符串chars中的任一utf-8编码在s中第一次出现的位置,如不存在或者chars为空字符串则返回-1
func IndexFunc(s []byte, f func(r rune) bool) int s中第一个满足函数f的位置i(该处的utf-8码值r满足f(r)==true),不存在则返回-1
func LastIndex(s, sep []byte) int 切片sep在字符串s中最后一次出现的位置,不存在则返回-1。
func LastIndexAny(s []byte, chars string) int 字符串chars中的任一utf-8字符在s中最后一次出现的位置,如不存在或者chars为空字符串则返回-1。
func LastIndexFunc(s []byte, f func(r rune) bool) int s中最后一个满足函数f的unicode码值的位置i,不存在则返回-1。
替换
func Replace(s, old, new []byte, n int) []byte
- 返回将s中前n个不重叠old切片序列都替换为new的新的切片拷贝,如果n<0会替换所有old子切片。
func Map(mapping func(r rune) rune, s []byte) []byte
- 将s的每一个unicode码值r都替换为mapping(r),返回这些新码值组成的切片拷贝。如果mapping返回一个负值,将会丢弃该码值而不会被替换(返回值中对应位置将没有码值)。
拆合
func Fields(s []byte) [][]byte
返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)分割的多个子切片。如果字符串全部是空白或者是空字符串的话,会返回空切片。
func FieldsFunc(s []byte, f func(rune) bool) [][]byte 类似Fields,但使用函数f来确定分割符(满足f的utf-8码值)。如果字符串全部是分隔符或者是空字符串的话,会返回空切片。
func Split(s, sep []byte) [][]byte 以sep的对s进行分割
func SplitN(s, sep []byte, n int) [][]byte
- 以sep的对s进行分割
- n > 0 : 返回的切片最多n个子字符串;最后一个子字符串包含未进行切割的部分。
- n == 0: 返回nil
- n < 0 : 返回所有的子字符串组成的切片
func SplitAfter(s, sep []byte) [][]byte
- 切割后会带上sep
str :=[]byte{'a','b','c'}
strSplit:=bytes.SplitAfter(str,[]byte{'b'})
fmt.Printf("%c",strSplit)//[[a b] [c]]
func SplitAfterN(s, sep []byte, n int) [][]byte
- 切割后会带上sep
- n > 0 : 返回的切片最多n个子字符串;最后一个子字符串包含未进行切割的部分。
- n == 0: 返回nil
- n < 0 : 返回所有的子字符串组成的切片
func Join(s [][]byte, sep []byte) []byte
- 将一系列[]byte切片连接为一个[]byte切片,之间用sep来分隔,返回生成的新切片。
func Repeat(b []byte, count int) []byte
- 返回count个b串联形成的新的切片。
type Reader
Reader类型通过从一个[]byte读取数据,实现了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。
func NewReader(b []byte) Reader
func (r Reader) Len() int Len返回r包含的切片中还没有被读取的部分。
func (r Reader) Read(b []byte) (n int, err error)
func (r Reader) ReadByte() (b byte, err error)
func (r Reader) UnreadByte() error
func (r Reader) ReadRune() (ch rune, size int, err error)
func (r Reader) UnreadRune() error
func (r Reader) Seek(offset int64, whence int) (int64, error) Seek实现了io.Seeker接口。
func (r Reader) ReadAt(b []byte, off int64) (n int, err error)
func (r Reader) WriteTo(w io.Writer) (n int64, err error) WriteTo实现了io.WriterTo接口。
type Buffer
Buffer是一个实现了读写方法的可变大小的字节缓冲。本类型的零值是一个空的可用于读写的缓冲。
var b bytes.Buffer // A Buffer needs no initialization.
b.Write([]byte("Hello "))
fmt.Fprintf(&b, "world!")
b.WriteTo(os.Stdout)
Hello world!
buf := bytes.NewBufferString("R29waGVycyBydWxlIQ==")
dec := base64.NewDecoder(base64.StdEncoding, buf)
io.Copy(os.Stdout, dec)
Gophers rule!
func NewBuffer(buf []byte) *Buffer
- 使用buf作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer;
- 大多数情况下,new(Buffer)(或只是声明一个Buffer类型变量)就足以初始化一个Buffer了
func NewBufferString(s string) *Buffer
- NewBuffer使用s作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer。
- 大多数情况下,new(Buffer)(或只是声明一个Buffer类型变量)就足以初始化一个Buffer了
func (b *Buffer) Reset()
- Reset重设缓冲,因此会丢弃全部内容,等价于b.Truncate(0)。
- 返回缓冲中未读取部分的字节长度;b.Len() == len(b.Bytes())。
func (b *Buffer) Bytes() []byte
- 返回未读取部分字节数据的切片
func (b *Buffer) String() string
- 将未读取部分的字节数据作为字符串返回,如果b是nil指针,会返回”
“
func (b *Buffer) Truncate(n int)
- 丢弃缓冲中除前n字节数据外的其它数据,如果n小于零或者大于缓冲容量将panic。
- 必要时会增加缓冲的容量,以保证n字节的剩余空间。调用Grow(n)后至少可以向缓冲中写入n字节数据而无需申请内存。
func (b *Buffer) Read(p []byte) (n int, err error)
- Read方法从缓冲中读取数据直到缓冲中没有数据或者读取了len(p)字节数据,将读取的数据写入p。
- n是读取的字节数,除非缓冲中完全没有数据可以读取并写入p,此时返回值err为io.EOF;否则err总是nil。
func (b *Buffer) Next(n int) []byte
- 返回未读取部分前n字节数据的切片,并且移动读取位置,就像调用了Read方法一样。如果缓冲内数据不足,会返回整个数据的切片。切片只在下一次调用b的读/写方法前才合法。
func (b *Buffer) ReadByte() (c byte, err error)
- ReadByte读取并返回缓冲中的下一个字节。如果没有数据可用,返回值err为io.EOF。
func (b *Buffer) UnreadByte() error
- UnreadByte吐出最近一次读取操作读取的最后一个字节。如果最后一次读取操作之后进行了写入,本方法会返回错误。
func (b *Buffer) ReadRune() (r rune, size int, err error)
- ReadRune读取并返回缓冲中的下一个utf-8码值。如果没有数据可用,返回值err为io.EOF。如果缓冲中的数据是错误的utf-8编码,本方法会吃掉一字节并返回(U+FFFD, 1, nil)。
func (b *Buffer) UnreadRune() error
- UnreadRune吐出最近一次调用ReadRune方法读取的unicode码值。如果最近一次读写操作不是ReadRune,本方法会返回错误。(这里就能看出来UnreadRune比UnreadByte严格多了)
func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
- ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片。
func (b *Buffer) ReadString(delim byte) (line string, err error)
- ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。
func (b *Buffer) Write(p []byte) (n int, err error)
- Write将p的内容写入缓冲中,如必要会增加缓冲容量。返回值n为len(p),err总是nil。
func (b *Buffer) WriteString(s string) (n int, err error)
- Write将s的内容写入缓冲中,如必要会增加缓冲容量。返回值n为len(p),err总是nil。
func (b *Buffer) WriteByte(c byte) error
- WriteByte将字节c写入缓冲中,如必要会增加缓冲容量。返回值总是nil
func (b *Buffer) WriteRune(r rune) (n int, err error)
- WriteByte将unicode码值r的utf-8编码写入缓冲中,如必要会增加缓冲容量。返回值总是nil
func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)
- ReadFrom从r中读取数据直到结束并将读取的数据写入缓冲中,如必要会增加缓冲容量。返回值n为从r读取并写入b的字节数;会返回读取时遇到的除了io.EOF之外的错误。如果缓冲太大,ReadFrom会采用错误值ErrTooLarge引发panic。
func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
- WriteTo从缓冲中读取数据直到缓冲内没有数据或遇到错误,并将这些数据写入w。返回值n为从b读取并写入w的字节数;返回值总是可以无溢出的写入int类型,但为了匹配io.WriterTo接口设为int64类型。从b读取时遇到的非io.EOF错误及写入w时遇到的错误都会终止本方法并返回该错误。