在线文档教程

字节 | bytes

Package bytes

  • import "bytes"

  • 概述

  • 索引

  • 示例

概述

包字节实现了操作字节片的函数。它类似于字符串包的设施。

索引

Constants(常量)

Variables(变量)

func Compare(a, b []byte) int

func Contains(b, subslice []byte) bool

func ContainsAny(b []byte, chars string) bool

func ContainsRune(b []byte, r rune) bool

func Count(s, sep []byte) int

func Equal(a, b []byte) bool

func EqualFold(s, t []byte) bool

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

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

func HasPrefix(s, prefix []byte) bool

func HasSuffix(s, suffix []byte) bool

func Index(s, sep []byte) int

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

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

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

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

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

func LastIndex(s, sep []byte) int

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

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

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

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

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

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

func Runes(s []byte) []rune

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

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

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

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

func Title(s []byte) []byte

func ToLower(s []byte) []byte

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

func ToTitle(s []byte) []byte

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

func ToUpper(s []byte) []byte

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

func Trim(s []byte, cutset string) []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 TrimSpace(s []byte) []byte

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

type Buffer

  • func NewBuffer(buf []byte) *Buffer

  • func NewBufferString(s string) *Buffer

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

  • func (b *Buffer) Cap() int

  • func (b *Buffer) Grow(n int)

  • func (b *Buffer) Len() int

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

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

  • func (b *Buffer) ReadByte() (byte, error)

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

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

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

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

  • func (b *Buffer) Reset()

  • func (b *Buffer) String() string

  • func (b *Buffer) Truncate(n int)

  • func (b *Buffer) UnreadByte() error

  • func (b *Buffer) UnreadRune() error

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

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

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

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

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

type Reader

  • func NewReader(b []byte) *Reader

  • func (r *Reader) Len() int

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

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

  • func (r *Reader) ReadByte() (byte, error)

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

  • func (r *Reader) Reset(b []byte)

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

  • func (r *Reader) Size() int64

  • func (r *Reader) UnreadByte() error

  • func (r *Reader) UnreadRune() error

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

Bugs

示例

Buffer

包文件

buffer.go bytes.go bytes_amd64.go bytes_decl.go reader.go

常量

MinRead是由Buffer.ReadFrom传递给Read调用的最小切片大小。只要缓冲区的最小读取字节数超过了保存r内容所需的字节数,ReadFrom将不会增长底层缓冲区。

const MinRead = 512

变量

如果无法分配内存以将数据存储在缓冲区中,则 ErrTooLarge 会传递给panic。

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

func Compare(查看源代码)

func Compare(a, b []byte) int

Compare 按字典顺序返回一个比较两个字节片段的整数。如果a == b,结果将为0,如果 a <b 则返回-1,如果 a> b 则返回+1。零参数相当于一个空片。

示例

package main import ( "bytes" ) func main() { // 通过将比较结果与零比较来解释比较结果。 var a, b []byte if bytes.Compare(a, b) < 0 { // a 小于 b } if bytes.Compare(a, b) <= 0 { // a 小于或等于 b } if bytes.Compare(a, b) > 0 { // a 大于 b } if bytes.Compare(a, b) >= 0 { // a 大于或等于 b } // 为了比较平等,优先选择等于比较。 if bytes.Equal(a, b) { // a 等于 b } if !bytes.Equal(a, b) { // a 不等于 b } }

示例(搜索)

package main import ( "bytes" "sort" ) func main() { // 二进制搜索查找匹配的字节片。 var needle []byte var haystack [][]byte // 假设排序 i := sort.Search(len(haystack), func(i int) bool { // 返回 haystack[i] >= needle。 return bytes.Compare(haystack[i], needle) >= 0 }) if i < len(haystack) && bytes.Equal(haystack[i], needle) { // 找到了 } }

func Contains(查看源代码)

func Contains(b, subslice []byte) bool

包含报告 sublice 是否在 b 之内。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.Contains([]byte("seafood"), []byte("foo"))) fmt.Println(bytes.Contains([]byte("seafood"), []byte("bar"))) fmt.Println(bytes.Contains([]byte("seafood"), []byte(""))) fmt.Println(bytes.Contains([]byte(""), []byte(""))) }

func ContainsAny(查看源代码)

func ContainsAny(b []byte, chars string) bool

ContainsAny 报告字符中的任何 UTF-8 编码的 Unicode 代码点是否在 b 中。

func ContainsRune(查看源代码)

func ContainsRune(b []byte, r rune) bool

ContainsRune 报告 Unicode 代码点 r 是否在 b 之内。

func Count(查看源代码)

func Count(s, sep []byte) int

Count 计算s中不重叠实例的数量。如果 sep 为空片段,则 Count 返回1 + s中的 Unicode 代码点数。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.Count([]byte("cheese"), []byte("e"))) fmt.Println(bytes.Count([]byte("five"), []byte(""))) // before & after each rune }

func Equal(查看源代码)

func Equal(a, b []byte) bool

Equal 返回一个布尔值,报告 a 和 b 是否是相同的长度并且包含相同的字节。零参数相当于一个空片。

fuc EqualFold(查看源代码)

func EqualFold(s, t []byte) bool

EqualFold 报告无论 s 和 t,解释为 UTF-8 字符串,在 Unicode 大小写折叠下是否相等。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.EqualFold([]byte("Go"), []byte("go"))) }

func Fields(查看源代码)

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

字段在一个或多个连续空白字符的每个实例周围分割切片,如果 s 仅包含空格,则返回 s 的子片段或空列表。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("Fields are: %q", bytes.Fields([]byte(" foo bar baz "))) }

func FieldsFunc(查看源文档)

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

FieldsFunc 将s解释为 UTF-8 编码的 Unicode 代码点序列。它在每次满足 f(c) 的代码点 c 运行时分割片 s 并返回s的一个子片段。如果s中的所有代码点满足 f(c) 或len(s) == 0,则返回空片。FieldsFunc 不保证它调用f(c)的顺序。如果f没有为给定的 c 返回一致的结果,那么 FieldsFunc 可能会崩溃。

示例

package main import ( "bytes" "fmt" "unicode" ) func main() { f := func(c rune) bool { return !unicode.IsLetter(c) && !unicode.IsNumber(c) } fmt.Printf("Fields are: %q", bytes.FieldsFunc([]byte(" foo1;bar2,baz3..."), f)) }

func HasPrefix(查看源代码)

func HasPrefix(s, prefix []byte) bool

HasPrefix测试字节片是否以前缀开头。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("Go"))) fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("C"))) fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte(""))) }

func HasSuffix(查看源代码)

func HasSuffix(s, suffix []byte) bool

HasSuffix 测试字节片段是否以后缀结尾。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.HasSuffix([]byte("Amigo"), []byte("go"))) fmt.Println(bytes.HasSuffix([]byte("Amigo"), []byte("O"))) fmt.Println(bytes.HasSuffix([]byte("Amigo"), []byte("Ami"))) fmt.Println(bytes.HasSuffix([]byte("Amigo"), []byte(""))) }

func Index(查看源代码)

func Index(s, sep []byte) int

索引返回 s 中第一个 sep 实例的索引,如果 s 中不存在 sep,则返回-1。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.Index([]byte("chicken"), []byte("ken"))) fmt.Println(bytes.Index([]byte("chicken"), []byte("dmr"))) }

func IndexAny(查看源代码)

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

IndexAny 将 s 解释为 UTF-8 编码的 Unicode 代码点序列。它返回字符中任何 Unicode 代码点的 s 中第一次出现的字节索引。如果字符为空或者没有共同的代码点,则返回-1。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.IndexAny([]byte("chicken"), "aeiouy")) fmt.Println(bytes.IndexAny([]byte("crwth"), "aeiouy")) }

func IndexByte(查看源代码)

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

IndexByte 返回 s 的第一个实例的索引,如果 c 不存在于 s 中,则返回 -1。

func IndexFunc(查看源代码)

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

IndexFunc 将 s 解释为一系列UTF-8编码的Unicode代码点。它返回满足 f(c) 的第一个 Unicode 代码点的 s 中的字节索引,否则返回 -1。

示例

package main import ( "bytes" "fmt" "unicode" ) func main() { f := func(c rune) bool { return unicode.Is(unicode.Han, c) } fmt.Println(bytes.IndexFunc([]byte("Hello, 世界"), f)) fmt.Println(bytes.IndexFunc([]byte("Hello, world"), f)) }

func IndexRune(查看源代码)

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

IndexRune将 s 解释为一系列UTF-8编码的Unicode代码点。它返回给定符文的 s 中第一个出现的字节索引。如果符文不在 s 中,它会返回-1。如果 r 是utf8.RuneError,它将返回任何无效的UTF-8字节序列的第一个实例。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.IndexRune([]byte("chicken"), 'k')) fmt.Println(bytes.IndexRune([]byte("chicken"), 'd')) }

func Join(查看源代码)

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

Join 连接 s的元素以创建一个新的字节片。分隔符 sep 放置在生成的切片中的元素之间。

示例

package main import ( "bytes" "fmt" ) func main() { s := [][]byte{[]byte("foo"), []byte("bar"), []byte("baz")} fmt.Printf("%s", bytes.Join(s, []byte(", "))) }

func LastIndex(查看源代码)

func LastIndex(s, sep []byte) int

LastIndex 返回 s 中最后一个 sep 实例的索引,如果 sep 中不存在 s,则返回-1。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Println(bytes.Index([]byte("go gopher"), []byte("go"))) fmt.Println(bytes.LastIndex([]byte("go gopher"), []byte("go"))) fmt.Println(bytes.LastIndex([]byte("go gopher"), []byte("rodent"))) }

func LastIndexAny(查看源代码)

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

LastIndexAny 将 s 解释为UTF-8编码的 Unicode 代码点序列。它返回字符中任何 Unicode 代码点的最后一次出现的字节索引。如果字符为空或者没有共同的代码点,则返回-1。

func LastIndexByte(查看源代码)

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

LastIndexByte 返回 s 的最后一个实例的索引,如果 c 不存在于 s 中,则返回-1。

func LastIndexFunc(查看源代码)

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

LastIndexFunc 将 s 解释为UTF-8编码的 Unicode 代码点序列。它返回满足 f(c) 的最后一个 Unicode 代码点的 s 中的字节索引,否则返回-1。

func Map(查看源代码)

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

Map 根据映射函数返回字节切片s的所有字符修改后的副本。如果映射返回负值,则字符将从字符串中删除而不会被替换。 s 和输出中的字符被解释为 UTF-8 编码的 Unicode 代码点。

示例

package main import ( "bytes" "fmt" ) func main() { rot13 := func(r rune) rune { switch { case r >= 'A' && r <= 'Z': return 'A' + (r-'A'+13)%26 case r >= 'a' && r <= 'z': return 'a' + (r-'a'+13)%26 } return r } fmt.Printf("%s", bytes.Map(rot13, []byte("'Twas brillig and the slithy gopher..."))) }

func Repeat(查看源代码)

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

重复返回由 b 的计数副本组成的新字节片段。

如果 count 为负数或者 (len(b) * count) 的结果溢出,它会发生混乱。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("ba%s", bytes.Repeat([]byte("na"), 2)) }

func Replace(查看源代码)

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

Replace 将返回 slice 的一个副本,其中前 n 个非重叠的旧实例将被 new 替换。如果 old 是空的,它会在切片的开头和每个 UTF-8 序列之后进行匹配,最多可产生 k-1 切片的 k+1 替换。如果 n<0,则替换次数没有限制。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s\n", bytes.Replace([]byte("oink oink oink"), []byte("k"), []byte("ky"), 2)) fmt.Printf("%s\n", bytes.Replace([]byte("oink oink oink"), []byte("oink"), []byte("moo"), -1)) }

func Runes(查看源代码)

func Runes(s []byte) []rune

符文返回相当于 s 的一段符文(Unicode 代码点)。

func Split(查看源代码)

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

将切片分割成由 sep 分隔的所有子切片,并返回这些分隔符之间的一部分子切片。如果 sep 为空,Split会在每个UTF-8序列之后分裂。它相当于 SplitN,计数为 -1 。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%q\n", bytes.Split([]byte("a,b,c"), []byte(","))) fmt.Printf("%q\n", bytes.Split([]byte("a man a plan a canal panama"), []byte("a "))) fmt.Printf("%q\n", bytes.Split([]byte(" xyz "), []byte(""))) fmt.Printf("%q\n", bytes.Split([]byte(""), []byte("Bernardo O'Higgins"))) }

func SplitAfter(查看源代码)

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

SplitAfter 在 sep 的每个实例之后切片到所有 sublices 中,并返回这些 sublices 的一部分。如果 sep 为空,则 SplitAfter 会在每个 UTF-8 序列后分割。它相当于 SplitAfterN ,计数为 -1 。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%q\n", bytes.SplitAfter([]byte("a,b,c"), []byte(","))) }

func SplitAfterN(查看源代码)

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

在每个 sep 实例之后,SplitAfterN 将 s 分割成子项,并返回这些子项的一部分。如果 sep 为空,则 SplitAfterN 在每个 UTF-8 序列之后分割。计数确定要返回的子备份数量:

n > 0: 至多n个子模板;最后一个子切片将成为未分割的剩余部分。 n == 0: the result is nil (zero subslices) n < 0: 所有sublices

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%q\n", bytes.SplitAfterN([]byte("a,b,c"), []byte(","), 2)) }

func SplitN(查看源代码)

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

将 SplitN 切片成由 sep 分隔的子片段,并返回这些分隔片之间的一部分子片段。如果 sep 为空, SplitN 会在每个UTF-8序列之后分裂。计数确定要返回的子备份数量:

n > 0: at most n subslices; the last subslice will be the unsplit remainder. n == 0: the result is nil (zero subslices) n < 0: all subslices

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%q\n", bytes.SplitN([]byte("a,b,c"), []byte(","), 2)) z := bytes.SplitN([]byte("a,b,c"), []byte(","), 0) fmt.Printf("%q (nil = %v)\n", z, z == nil) }

func Title(查看源代码)

func Title(s []byte) []byte

标题返回一个 s 的副本,其中包含所有 Unicode 字母,这些字母开始被映射到其标题大小写。

BUG(rsc):规则标题用于单词边界的规则不能正确处理 Unicode 标点符号。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s", bytes.Title([]byte("her royal highness"))) }

func ToLower(查看源代码)

func ToLower(s []byte) []byte

ToLower 返回所有 Unicode 字母映射为小写字节片段的副本。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s", bytes.ToLower([]byte("Gopher"))) }

func ToLowerSpecial(查看源代码)

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

ToLowerSpecial 返回所有 Unicode 字母映射到小写字节的字节切片的副本,优先考虑特殊的外壳规则。

func ToTitle(查看源代码)

func ToTitle(s []byte) []byte

ToTitle 返回字节切片 s 的副本,并将所有 Unicode 字母映射到它们的标题大小写。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s\n", bytes.ToTitle([]byte("loud noises"))) fmt.Printf("%s\n", bytes.ToTitle([]byte("хлеб"))) }

func ToTitleSpecial(查看源代码)

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

ToTitleSpecial 返回字节片段 s 的副本,并将所有 Unicode 字母映射到它们的标题大小写,优先考虑特殊外壳规则。

func ToUpper(查看源代码)

func ToUpper(s []byte) []byte

ToUpper 返回字节切片 s 的副本,并将所有 Unicode 字母映射为大写字母。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s", bytes.ToUpper([]byte("Gopher"))) }

func ToUpperSpecial(查看源代码)

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

ToUpperSpecial 返回字节切片 s 的副本,其中所有 Unicode 字母都映射为大写字母,优先考虑特殊外壳规则。

func Trim(查看源代码)

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

Trim 通过切割 cutset 中包含的所有前导和尾随 UTF-8 编码的 Unicode 代码点来返回 s 的子片段。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("[%q]", bytes.Trim([]byte(" !!! Achtung! Achtung! !!! "), "! ")) }

func TrimFunc(查看源代码)

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

TrimFunc 通过分割所有满足f(c)的前导和尾随 UTF-8 编码的 Unicode 代码点 c 来返回 s 的子片段。

func TrimLeft(查看源代码)

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

TrimLeft 通过切割 cutset 中包含的所有主要UTF-8编码的 Unicode 代码点来返回 s 的子片段。

func TrimLeftFunc(查看源代码)

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

TrimLeftFunc 通过分割所有满足 f(c) 的 UTF-8 编码的 Unicode 编码点 c 来返回 s 的子片段。

func TrimPrefix(查看源代码)

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

TrimPrefix 在没有提供的前导前缀字符串的情况下返回 s 。如果 s 不是以前缀开始,则 s 不变。

示例

package main import ( "bytes" "fmt" ) func main() { var b = []byte("Goodbye,, world!") b = bytes.TrimPrefix(b, []byte("Goodbye,")) b = bytes.TrimPrefix(b, []byte("See ya,")) fmt.Printf("Hello%s", b) }

func TrimRight(查看源代码)

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

TrimRight 通过切割 cutset 中包含的所有尾随 UTF-8 编码的 Unicode 代码点来返回 s 的子片段。

func TrimRightFunc(查看源代码)

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

TrimRightFunc 通过分割所有满足 f(c) 的 UTF-8 编码的 Unicode 代码点 c 来返回 s 的子片段。

func TrimSpace(查看源代码)

func TrimSpace(s []byte) []byte

TrimSpace 根据 Unicode 定义的所有前导和尾随空白区域来返回 s 的子片段。

示例

package main import ( "bytes" "fmt" ) func main() { fmt.Printf("%s", bytes.TrimSpace([]byte(" \t\n a lone gopher \n\t\r\n"))) }

func TrimSuffix(查看源代码)

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

TrimSuffix 在没有提供尾随后缀字符串的情况下返回 s 。如果 s 不以后缀结尾,则 s 不变。

示例

package main import ( "bytes" "os" ) func main() { 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) }

type Buffer(查看源代码)

缓冲区是一个可变大小的带有读和写方法的字节缓冲区。Buffer 的零值是一个准备使用的空缓冲区。

type Buffer struct { // 包含过滤或未导出的字段 }

示例

package main import ( "bytes" "fmt" "os" ) func main() { var b bytes.Buffer // 缓冲区不需要初始化。 b.Write([]byte("Hello ")) fmt.Fprintf(&b, "world!") b.WriteTo(os.Stdout) }

示例(Reader)

package main import ( "bytes" "encoding/base64" "io" "os" ) func main() { // 缓冲区可以将字符串或[]字节转换为io.Reader。 buf := bytes.NewBufferString("R29waGVycyBydWxlIQ==") dec := base64.NewDecoder(base64.StdEncoding, buf) io.Copy(os.Stdout, dec) }

func NewBuffer(查看源代码)

func NewBuffer(buf []byte) *Buffer

NewBuffer 使用 buf 作为其初始内容创建并初始化新的 Buffer。新的缓冲区取得了 buf 的所有权,并且调用者在调用之后不应该使用 buf 。NewBuffer 旨在准备一个缓冲区来读取现有数据。它也可以用来调整写入的内部缓冲区大小。要做到这一点,buf 应该具有所需的容量,但长度为零。

在大多数情况下,新的(缓冲区)(或者只是声明一个缓冲区变量)足以初始化缓冲区。

func NewBufferString(查看源代码)

func NewBufferString(s string) *Buffer

NewBufferString 使用字符串 s 作为其初始内容创建并初始化一个新的 Buffer。它旨在准备一个缓冲区来读取现有的字符串。

在大多数情况下,新的(缓冲区)(或者只是声明一个缓冲区变量)足以初始化缓冲区。

func (*Buffer) Bytes(查看源代码)

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

字节返回一段长度 b.Len(),其中包含缓冲区的未读部分。该切片仅在下一次缓冲区修改之前有效(即,直到下一次调用 Read,Write,Reset或Truncate 之类的方法)。至少在下一次缓冲区修改之前,切片会对缓冲区内容进行别名,因此切片的即时更改将影响将来读取的结果。

func (*Buffer) Cap(查看源代码)

func (b *Buffer) Cap() int

Cap 返回缓冲区底层字节片段的容量,即分配给缓冲区数据的总空间。

func (*Buffer) Grow(查看源代码)

func (b *Buffer) Grow(n int)

如果有必要,增长缓冲区的容量以保证另外n个字节的空间。在Grow(n)之后,至少可以将n个字节写入缓冲区而无需其他分配。如果n是负数,Grow 会陷入混乱。如果缓冲区不能增长,它会与 ErrTooLarge 一起发生混乱。

示例

package main import ( "bytes" "fmt" ) func main() { var b bytes.Buffer b.Grow(64) bb := b.Bytes() b.Write([]byte("64 bytes or fewer")) fmt.Printf("%q", bb[:b.Len()]) }

func (*Buffer) Len(查看源代码)

func (b *Buffer) Len() int

Len 返回缓冲区未读部分的字节数;b.Len() == len(b.Bytes())。

func (*Buffer) Next(查看源代码)

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

接下来返回包含来自缓冲区的下n个字节的切片,如同字节已由 Read 返回一样推进缓冲区。如果缓冲区中少于n个字节,则 Next 返回整个缓冲区。切片只有在下次调用读取或写入方法时才有效。

func (*Buffer) Read(查看源代码)

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

Read 从缓冲区中读取下一个 len(p) 字节,或者直到缓冲区被耗尽。返回值n是读取的字节数。如果缓冲区没有数据要返回,则 err 为 io.EOF(除非len(p)为零); 否则为零。

func (*Buffer) ReadByte(查看源代码)

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

ReadByte 读取并返回缓冲区中的下一个字节。如果没有可用的字节,则返回错误 io.EOF。

func (*Buffer) ReadBytes(查看源代码)

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

ReadBytes 一直读取,直到输入中delim第一次出现时停止 ,并返回一个包含小于等于分隔符数据的片段。如果ReadBytes在查找分隔符之前遇到错误,它将返回错误之前读取的数据和错误本身(通常为 io.EOF )。当且仅当返回的数据不以分隔符结束时,ReadBytes 才返回 err != nil。

func (*Buffer) ReadFrom(查看源代码)

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

ReadFrom 从 r 读取数据直到 EOF 并将其附加到缓冲区,根据需要生长缓冲区。返回值n是读取的字节数。读取过程中遇到的除 io.EOF 外的任何错误也会返回。如果缓冲区变得过大,ReadFrom 将与 ErrTooLarge 一起发生混乱。

func (*Buffer) ReadRune(查看源代码)

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

ReadRune 读取并返回缓冲区中的下一个UTF-8编码的 Unicode 代码点。如果没有字节可用,返回的错误是io.EOF。如果字节是错误的UTF-8编码,则它将消耗一个字节并返回U + FFFD,1。

func (*Buffer) ReadString(查看源代码)

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

ReadString 读取,直到输入中第一次出现 delim ,返回一个包含数据的字符串直到并包含分隔符。如果ReadString 在查找分隔符之前遇到错误,它将返回在错误之前读取的数据和错误本身(通常为 io.EOF )。当且仅当返回的数据没有以分隔符结束时,ReadString 返回 err!= nil。

func (*Buffer) Reset(查看源代码)

func (b *Buffer) Reset()

Reset将缓冲区重置为空,但它保留了未来写入使用的底层存储。重置与Truncate(0) 相同。

func (*Buffer) String(查看源代码)

func (b *Buffer) String() string

字符串以字符串形式返回缓冲区未读部分的内容。如果 Buffer 是一个零指针,它将返回“<nil>”。

func (*Buffer) Truncate(查看源代码)

func (b *Buffer) Truncate(n int)

截断从缓冲区丢弃除前 n 个未读字节以外的所有字节,但继续使用相同的分配存储。如果 n 是负数或大于缓冲区的长度,它会发生混乱。

func (*Buffer) UnreadByte(查看源代码)

func (b *Buffer) UnreadByte() error

UnreadByte 读取最近成功读取操作返回的最后一个字节,该操作至少读取一个字节。如果自上次读取后发生写入,如果上次读取返回错误,或者读取读取的是零字节,则 UnreadByte 返回错误。

func (*Buffer) UnreadRune(查看源代码)

func (b *Buffer) UnreadRune() error

UnreadRune 未读取 ReadRune 返回的最后一个符文。如果缓冲区上的最新读取或写入操作不是成功的ReadRune,则 UnreadRune 将返回错误。(在这方面,它比 UnreadByte 更严格,它将读取任何读操作的最后一个字节。)

func (*Buffer) Write(查看源代码)

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

写入将 p 的内容附加到缓冲区,根据需要增加缓冲区。返回值n是 p 的长度; err 总是零。如果缓冲区变得过大,Write 会与 ErrTooLarge 混淆。

func (*Buffer) WriteByte(查看源代码)

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

WriteByte 将字节 c 附加到缓冲区,根据需要生长缓冲区。返回的错误始终为零,但包含在内以匹配 bufio.Writer 的 WriteByte 。如果缓冲区变得太大,WriteByte 会与 ErrTooLarge 一起发生混乱。

func (*Buffer) WriteRune(查看源代码)

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

WriteRune 将 Unicode 代码点 r 的UTF-8 编码附加到缓冲区,返回其长度和错误,该错误总是为零,但包含在内以匹配 bufio.Writer 的 WriteRune。缓冲区根据需要增长;如果它变得太大,WriteRune 将会与 ErrTooLarge 混淆。

func (*Buffer) WriteString(查看源代码)

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

WriteString将 s 的内容附加到缓冲区,根据需要增加缓冲区。返回值 n 是 s 的长度;err 总是零。如果缓冲区变得太大,WriteString 会与 ErrTooLarge 混淆。

func (*Buffer) WriteTo(查看源代码)

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

WriteTo 将数据写入 w 直到缓冲区耗尽或发生错误。返回值n是写入的字节数;它总是适合 int ,但它是 int64 来匹配 io.WriterTo 接口。写入过程中遇到的任何错误也会返回。

type Reader(查看源代码)

Reader 通过从字节片段读取来实现 io.Reader,io.ReaderAt,io.WriterTo,io.Seeker,io.ByteScanner和io.RuneScanner 接口。与缓冲区不同,Reader 是只读的并支持搜索。

type Reader struct { // 包含过滤或未导出的字段 }

func NewReader(查看源代码)

func NewReader(b []byte) *Reader

NewReader从 b 返回新的 Reader 读数。

func (*Reader) Len(查看源代码)

func (r *Reader) Len() int

Len 返回切片的未读部分的字节数。

func (*Reader) Read(查看源代码)

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

func (*Reader) ReadAt(查看源代码)

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

func (*Reader) ReadByte(查看源代码)

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

func (*Reader) ReadRune(查看源代码)

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

func (*Reader) Reset(查看源代码)

func (r *Reader) Reset(b []byte)

Reset 将Reader(读取器)重置为从 b 中读取。

func (*Reader) Seek(查看源代码)

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

Seek 实现了 io.Seeker 接口。

func (*Reader) Size(查看源代码)

func (r *Reader) Size() int64

Size 返回基础字节片的原始长度。大小是可通过 ReadAt 读取的字节数。返回的值总是相同的,不受调用任何其他方法的影响。

func (*Reader) UnreadByte(查看源代码)

func (r *Reader) UnreadByte() error

func (*Reader) UnreadRune(查看源代码)

func (r *Reader) UnreadRune() error

func (*Reader) WriteTo(查看源代码)

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

WriteTo 实现 io.WriterTo 接口。

错误

  • 标题用于单词边界的规则不能正确处理Unicode标点符号。