Go 语言

Go 语言教程 Go 语言环境安装 Go 语言结构 Go 语言基础语法 Go 语言数据类型 Go 语言变量 Go 语言常量 Go 语言运算符 Go 语言条件语句 Go 语言 if 语句 Go 语言 if...else 语句 Go 语言 if 语句嵌套 Go 语言 switch 语句 Go 语言 select 语句 Go 语言循环语句 Go 语言 for 循环 Go 语言循环嵌套 Go 语言 break 语句 Go 语言 continue 语句 Go 语言 goto 语句 Go 语言函数 Go 语言函数值传递值 Go 语言函数引用传递值 Go 语言函数作为值 Go 语言函数闭包 Go 语言函数方法 Go 语言变量作用域 Go 语言数组 Go 语言多维数组 Go 语言向函数传递数组 Go 语言指针 Go 语言指针数组 Go 语言指向指针的指针 Go 语言指针作为函数参数 Go 语言结构体 Go 语言切片(Slice) Go 语言范围(Range) Go 语言Map(集合) Go 语言递归函数 Go 语言类型转换 Go 语言接口 Go 错误处理 Go 语言开发工具Go 语言标准库

Go 语言标准库


package bytes

import "bytes"

bytes包实现了操作[]byte的常用函数。本包的函数和strings包的函数相当类似。

Go语言标准库 >>


  • Constants
  • Variables
  • func Compare(a, b []byte) int
  • func Equal(a, b []byte) bool
  • func EqualFold(s, t []byte) bool
  • func Runes(s []byte) []rune
  • func HasPrefix(s, prefix []byte) bool
  • func HasSuffix(s, suffix []byte) bool
  • func Contains(b, subslice []byte) bool
  • func Count(s, sep []byte) int
  • func Index(s, sep []byte) int
  • func IndexByte(s []byte, c byte) int
  • func IndexRune(s []byte, r rune) int
  • func IndexAny(s []byte, chars string) int
  • func IndexFunc(s []byte, f func(r rune) bool) int
  • func LastIndex(s, sep []byte) int
  • func LastIndexAny(s []byte, chars string) int
  • func LastIndexFunc(s []byte, f func(r rune) bool) int
  • func Title(s []byte) []byte
  • func ToLower(s []byte) []byte
  • func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte
  • func ToUpper(s []byte) []byte
  • func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte
  • func ToTitle(s []byte) []byte
  • func ToTitleSpecial(_case unicode.SpecialCase, s []byte) []byte
  • func Repeat(b []byte, count int) []byte
  • func Replace(s, old, new []byte, n int) []byte
  • func Map(mapping func(r rune) rune, s []byte) []byte
  • func Trim(s []byte, cutset string) []byte
  • func TrimSpace(s []byte) []byte
  • func TrimFunc(s []byte, f func(r rune) bool) []byte
  • func TrimLeft(s []byte, cutset string) []byte
  • func TrimLeftFunc(s []byte, f func(r rune) bool) []byte
  • func TrimPrefix(s, prefix []byte) []byte
  • func TrimRight(s []byte, cutset string) []byte
  • func TrimRightFunc(s []byte, f func(r rune) bool) []byte
  • func TrimSuffix(s, suffix []byte) []byte
  • func Fields(s []byte) [][]byte
  • func FieldsFunc(s []byte, f func(rune) bool) [][]byte
  • func Split(s, sep []byte) [][]byte
  • func SplitN(s, sep []byte, n int) [][]byte
  • func SplitAfter(s, sep []byte) [][]byte
  • func SplitAfterN(s, sep []byte, n int) [][]byte
  • func Join(s [][]byte, sep []byte) []byte
  • type Reader
  • type Buffer
  • Examples

    Go语言标准库 >>


  • Buffer
  • Buffer (Reader)
  • Compare
  • Compare (Search)
  • TrimPrefix
  • TrimSuffix
  • Constants

    const MinRead = 512

    MinRead是被Buffer.ReadFrom传递给Read调用的最小尺寸。只要该Buffer在保存内容之外有最少MinRead字节的余量,其ReadFrom方法就不会增加底层的缓冲。

    Variables

    var ErrTooLarge = errors.New("bytes.Buffer: too large")

    如果内存中不能申请足够保存数据的缓冲,ErrTooLarge就会被传递给panic函数。

    func Compare

    func Compare(a, b []byte) int

    Compare函数返回一个整数表示两个[]byte切片按字典序比较的结果(类同C的strcmp)。如果a==b返回0;如果a<b返回-1;否则返回+1。nil参数视为空切片。

    Example
    // Interpret Compare's result by comparing it to zero.
    var a, b []byte
    if bytes.Compare(a, b) < 0 {
        // a less b
    }
    if bytes.Compare(a, b) <= 0 {
        // a less or equal b
    }
    if bytes.Compare(a, b) > 0 {
        // a greater b
    }
    if bytes.Compare(a, b) >= 0 {
        // a greater or equal b
    }
    // Prefer Equal to Compare for equality comparisons.
    if bytes.Equal(a, b) {
        // a equal b
    }
    if !bytes.Equal(a, b) {
        // a not equal b
    }
    

    func Equal

    func Equal(a, b []byte) bool

    判断两个切片的内容是否完全相同。

    func EqualFold

    func EqualFold(s, t []byte) bool

    判断两个utf-8编码切片(将unicode大写、小写、标题三种格式字符视为相同)是否相同。

    func Runes

    func Runes(s []byte) []rune

    Runes函数返回和s等价的[]rune切片。(将utf-8编码的unicode码值分别写入单个rune)

    func HasPrefix

    func HasPrefix(s, prefix []byte) bool

    判断s是否有前缀切片prefix。

    func HasSuffix

    func HasSuffix(s, suffix []byte) bool

    判断s是否有后缀切片suffix。

    func Contains

    func Contains(b, subslice []byte) bool

    判断切片b是否包含子切片subslice。

    func Count

    func Count(s, sep []byte) int

    Count计算s中有多少个不重叠的sep子切片。

    func Index

    func Index(s, sep []byte) int

    子切片sep在s中第一次出现的位置,不存在则返回-1。

    func IndexByte

    func IndexByte(s []byte, c byte) int

    字符c在s中第一次出现的位置,不存在则返回-1。

    func IndexRune

    func IndexRune(s []byte, r rune) int

    unicode字符r的utf-8编码在s中第一次出现的位置,不存在则返回-1。

    func IndexAny

    func IndexAny(s []byte, chars string) int

    字符串chars中的任一utf-8编码在s中第一次出现的位置,如不存在或者chars为空字符串则返回-1

    func IndexFunc

    func IndexFunc(s []byte, f func(r rune) bool) int

    s中第一个满足函数f的位置i(该处的utf-8码值r满足f(r)==true),不存在则返回-1

    func LastIndex

    func LastIndex(s, sep []byte) int

    切片sep在字符串s中最后一次出现的位置,不存在则返回-1。

    func LastIndexAny

    func LastIndexAny(s []byte, chars string) int

    字符串chars中的任一utf-8字符在s中最后一次出现的位置,如不存在或者chars为空字符串则返回-1。

    func LastIndexFunc

    func LastIndexFunc(s []byte, f func(r rune) bool) int

    s中最后一个满足函数f的unicode码值的位置i,不存在则返回-1。

    func Title

    func Title(s []byte) []byte

    返回s中每个单词的首字母都改为标题格式的拷贝。

    BUG: Title用于划分单词的规则不能很好的处理Unicode标点符号。

    func ToLower

    func ToLower(s []byte) []byte

    返回将所有字母都转为对应的小写版本的拷贝。

    func ToLowerSpecial

    func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte

    使用_case规定的字符映射,返回将所有字母都转为对应的小写版本的拷贝。

    func ToUpper

    func ToUpper(s []byte) []byte

    返回将所有字母都转为对应的大写版本的拷贝。

    func ToUpperSpecial

    func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte

    使用_case规定的字符映射,返回将所有字母都转为对应的大写版本的拷贝。

    func ToTitle

    func ToTitle(s []byte) []byte

    返回将所有字母都转为对应的标题版本的拷贝。

    func ToTitleSpecial

    func ToTitleSpecial(_case unicode.SpecialCase, s []byte) []byte

    使用_case规定的字符映射,返回将所有字母都转为对应的标题版本的拷贝。

    func Repeat

    func Repeat(b []byte, count int) []byte

    返回count个b串联形成的新的切片。

    func Replace

    func Replace(s, old, new []byte, n int) []byte

    返回将s中前n个不重叠old切片序列都替换为new的新的切片拷贝,如果n<0会替换所有old子切片。

    func Map

    func Map(mapping func(r rune) rune, s []byte) []byte

    将s的每一个unicode码值r都替换为mapping(r),返回这些新码值组成的切片拷贝。如果mapping返回一个负值,将会丢弃该码值而不会被替换(返回值中对应位置将没有码值)。

    func Trim

    func Trim(s []byte, cutset string) []byte

    返回将s前后端所有cutset包含的unicode码值都去掉的子切片。(共用底层数组)

    func TrimSpace

    func TrimSpace(s []byte) []byte

    返回将s前后端所有空白(unicode.IsSpace指定)都去掉的子切片。(共用底层数组)

    func TrimFunc

    func TrimFunc(s []byte, f func(r rune) bool) []byte

    返回将s前后端所有满足f的unicode码值都去掉的子切片。(共用底层数组)

    func TrimLeft

    func TrimLeft(s []byte, cutset string) []byte

    返回将s前端所有cutset包含的unicode码值都去掉的子切片。(共用底层数组)

    func TrimLeftFunc

    func TrimLeftFunc(s []byte, f func(r rune) bool) []byte

    返回将s前端所有满足f的unicode码值都去掉的子切片。(共用底层数组)

    func TrimPrefix

    func TrimPrefix(s, prefix []byte) []byte

    返回去除s可能的前缀prefix的子切片。(共用底层数组)

    Example
    var b = []byte("Goodbye,, world!")
    b = bytes.TrimPrefix(b, []byte("Goodbye,"))
    b = bytes.TrimPrefix(b, []byte("See ya,"))
    fmt.Printf("Hello%s", b)

    Output:

    Hello, world!
    

    func TrimRight

    func TrimRight(s []byte, cutset string) []byte

    返回将s后端所有cutset包含的unicode码值都去掉的子切片。(共用底层数组)

    func TrimRightFunc

    func TrimRightFunc(s []byte, f func(r rune) bool) []byte

    返回将s后端所有满足f的unicode码值都去掉的子切片。(共用底层数组)

    func TrimSuffix

    func TrimSuffix(s, suffix []byte) []byte

    返回去除s可能的后缀suffix的子切片。(共用底层数组)

    Example
    var b = []byte("Hello, goodbye, etc!")
    b = bytes.TrimSuffix(b, []byte("goodbye, etc!"))
    b = bytes.TrimSuffix(b, []byte("gopher"))
    b = append(b, bytes.TrimSuffix([]byte("world!"), []byte("x!"))...)
    os.Stdout.Write(b)

    Output:

    Hello, world!
    

    func Fields

    func Fields(s []byte) [][]byte

    返回将字符串按照空白(unicode.IsSpace确定,可以是一到多个连续的空白字符)分割的多个子切片。如果字符串全部是空白或者是空字符串的话,会返回空切片。

    func FieldsFunc

    func FieldsFunc(s []byte, f func(rune) bool) [][]byte

    类似Fields,但使用函数f来确定分割符(满足f的utf-8码值)。如果字符串全部是分隔符或者是空字符串的话,会返回空切片。

    func Split

    func Split(s, sep []byte) [][]byte

    用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有[]byte切片组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个[]byte切片。

    func SplitN

    func SplitN(s, sep []byte, n int) [][]byte

    用去掉s中出现的sep的方式进行分割,会分割到最多n个子切片,并返回生成的所有[]byte切片组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个[]byte切片。参数n决定返回的切片的数目:

    n > 0 : 返回的切片最多n个子字符串;最后一个子字符串包含未进行切割的部分。
    n == 0: 返回nil
    n < 0 : 返回所有的子字符串组成的切片
    

    func SplitAfter

    func SplitAfter(s, sep []byte) [][]byte

    用从s中出现的sep后面切断的方式进行分割,会分割到结尾,并返回生成的所有[]byte切片组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个[]byte切片。

    func SplitAfterN

    func SplitAfterN(s, sep []byte, n int) [][]byte

    用从s中出现的sep后面切断的方式进行分割,会分割到最多n个子切片,并返回生成的所有[]byte切片组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个[]byte切片。参数n决定返回的切片的数目:

    n > 0 : 返回的切片最多n个子字符串;最后一个子字符串包含未进行切割的部分。
    n == 0: 返回nil
    n < 0 : 返回所有的子字符串组成的切片
    

    func Join

    func Join(s [][]byte, sep []byte) []byte

    将一系列[]byte切片连接为一个[]byte切片,之间用sep来分隔,返回生成的新切片。

    type Reader

    type Reader struct {
        // 内含隐藏或非导出字段
    }

    Reader类型通过从一个[]byte读取数据,实现了io.Reader、io.Seeker、io.ReaderAt、io.WriterTo、io.ByteScanner、io.RuneScanner接口。

    func NewReader

    func NewReader(b []byte) *Reader

    NewReader创建一个从s读取数据的Reader。

    func (*Reader) Len

    func (r *Reader) Len() int

    Len返回r包含的切片中还没有被读取的部分。

    func (*Reader) Read

    func (r *Reader) Read(b []byte) (n int, err error)

    func (*Reader) ReadByte

    func (r *Reader) ReadByte() (b byte, err error)

    func (*Reader) UnreadByte

    func (r *Reader) UnreadByte() error

    func (*Reader) ReadRune

    func (r *Reader) ReadRune() (ch rune, size int, err error)

    func (*Reader) UnreadRune

    func (r *Reader) UnreadRune() error

    func (*Reader) Seek

    func (r *Reader) Seek(offset int64, whence int) (int64, error)

    Seek实现了io.Seeker接口。

    func (*Reader) ReadAt

    func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)

    func (*Reader) WriteTo

    func (r *Reader) WriteTo(w io.Writer) (n int64, err error)

    WriteTo实现了io.WriterTo接口。

    type Buffer

    type Buffer struct {
        // 内含隐藏或非导出字段
    }

    Buffer是一个实现了读写方法的可变大小的字节缓冲。本类型的零值是一个空的可用于读写的缓冲。

    Example
    var b bytes.Buffer // A Buffer needs no initialization.
    b.Write([]byte("Hello "))
    fmt.Fprintf(&b, "world!")
    b.WriteTo(os.Stdout)

    Output:

    Hello world!
    
    Example (Reader)
    // A Buffer can turn a string or a []byte into an io.Reader.
    buf := bytes.NewBufferString("R29waGVycyBydWxlIQ==")
    dec := base64.NewDecoder(base64.StdEncoding, buf)
    io.Copy(os.Stdout, dec)

    Output:

    Gophers rule!
    

    func NewBuffer

    func NewBuffer(buf []byte) *Buffer

    NewBuffer使用buf作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer;也用于指定用于写入的内部缓冲的大小,此时,buf应为一个具有指定容量但长度为0的切片。buf会被作为返回值的底层缓冲切片。

    大多数情况下,new(Buffer)(或只是声明一个Buffer类型变量)就足以初始化一个Buffer了。

    func NewBufferString

    func NewBufferString(s string) *Buffer

    NewBuffer使用s作为初始内容创建并初始化一个Buffer。本函数用于创建一个用于读取已存在数据的buffer。

    大多数情况下,new(Buffer)(或只是声明一个Buffer类型变量)就足以初始化一个Buffer了。

    func (*Buffer) Reset

    func (b *Buffer) Reset()

    Reset重设缓冲,因此会丢弃全部内容,等价于b.Truncate(0)。

    func (*Buffer) Len

    func (b *Buffer) Len() int

    返回缓冲中未读取部分的字节长度;b.Len() == len(b.Bytes())。

    func (*Buffer) Bytes

    func (b *Buffer) Bytes() []byte

    返回未读取部分字节数据的切片,len(b.Bytes()) == b.Len()。如果中间没有调用其他方法,修改返回的切片的内容会直接改变Buffer的内容。

    func (*Buffer) String

    func (b *Buffer) String() string

    将未读取部分的字节数据作为字符串返回,如果b是nil指针,会返回"<nil>"。

    func (*Buffer) Truncate

    func (b *Buffer) Truncate(n int)

    丢弃缓冲中除前n字节数据外的其它数据,如果n小于零或者大于缓冲容量将panic。

    func (*Buffer) Grow

    func (b *Buffer) Grow(n int)

    必要时会增加缓冲的容量,以保证n字节的剩余空间。调用Grow(n)后至少可以向缓冲中写入n字节数据而无需申请内存。如果n小于零或者不能增加容量都会panic。

    func (*Buffer) Read

    func (b *Buffer) Read(p []byte) (n int, err error)

    Read方法从缓冲中读取数据直到缓冲中没有数据或者读取了len(p)字节数据,将读取的数据写入p。返回值n是读取的字节数,除非缓冲中完全没有数据可以读取并写入p,此时返回值err为io.EOF;否则err总是nil。

    func (*Buffer) Next

    func (b *Buffer) Next(n int) []byte

    返回未读取部分前n字节数据的切片,并且移动读取位置,就像调用了Read方法一样。如果缓冲内数据不足,会返回整个数据的切片。切片只在下一次调用b的读/写方法前才合法。

    func (*Buffer) ReadByte

    func (b *Buffer) ReadByte() (c byte, err error)

    ReadByte读取并返回缓冲中的下一个字节。如果没有数据可用,返回值err为io.EOF。

    func (*Buffer) UnreadByte

    func (b *Buffer) UnreadByte() error

    UnreadByte吐出最近一次读取操作读取的最后一个字节。如果最后一次读取操作之后进行了写入,本方法会返回错误。

    func (*Buffer) ReadRune

    func (b *Buffer) ReadRune() (r rune, size int, err error)

    ReadRune读取并返回缓冲中的下一个utf-8码值。如果没有数据可用,返回值err为io.EOF。如果缓冲中的数据是错误的utf-8编码,本方法会吃掉一字节并返回(U+FFFD, 1, nil)。

    func (*Buffer) UnreadRune

    func (b *Buffer) UnreadRune() error

    UnreadRune吐出最近一次调用ReadRune方法读取的unicode码值。如果最近一次读写操作不是ReadRune,本方法会返回错误。(这里就能看出来UnreadRune比UnreadByte严格多了)

    func (*Buffer) ReadBytes

    func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)

    ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片。如果ReadBytes方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadBytes方法返回的切片不以delim结尾时,会返回一个非nil的错误。

    func (*Buffer) ReadString

    func (b *Buffer) ReadString(delim byte) (line string, err error)

    ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。

    func (*Buffer) Write

    func (b *Buffer) Write(p []byte) (n int, err error)

    Write将p的内容写入缓冲中,如必要会增加缓冲容量。返回值n为len(p),err总是nil。如果缓冲变得太大,Write会采用错误值ErrTooLarge引发panic。

    func (*Buffer) WriteString

    func (b *Buffer) WriteString(s string) (n int, err error)

    Write将s的内容写入缓冲中,如必要会增加缓冲容量。返回值n为len(p),err总是nil。如果缓冲变得太大,Write会采用错误值ErrTooLarge引发panic。

    func (*Buffer) WriteByte

    func (b *Buffer) WriteByte(c byte) error

    WriteByte将字节c写入缓冲中,如必要会增加缓冲容量。返回值总是nil,但仍保留以匹配bufio.Writer的WriteByte方法。如果缓冲太大,WriteByte会采用错误值ErrTooLarge引发panic。

    func (*Buffer) WriteRune

    func (b *Buffer) WriteRune(r rune) (n int, err error)

    WriteByte将unicode码值r的utf-8编码写入缓冲中,如必要会增加缓冲容量。返回值总是nil,但仍保留以匹配bufio.Writer的WriteRune方法。如果缓冲太大,WriteRune会采用错误值ErrTooLarge引发panic。

    func (*Buffer) ReadFrom

    func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)

    ReadFrom从r中读取数据直到结束并将读取的数据写入缓冲中,如必要会增加缓冲容量。返回值n为从r读取并写入b的字节数;会返回读取时遇到的除了io.EOF之外的错误。如果缓冲太大,ReadFrom会采用错误值ErrTooLarge引发panic。

    func (*Buffer) WriteTo

    func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)

    WriteTo从缓冲中读取数据直到缓冲内没有数据或遇到错误,并将这些数据写入w。返回值n为从b读取并写入w的字节数;返回值总是可以无溢出的写入int类型,但为了匹配io.WriterTo接口设为int64类型。从b读取是遇到的非io.EOF错误及写入w时遇到的错误都会终止本方法并返回该错误。