概述
索引
- Variables
- func Contains(b, subslice []byte) bool
- func ContainsRune(b []byte, r rune) bool
- func Equal(a, b []byte) bool
- func Fields(s []byte) [][]byte
- func HasPrefix(s, prefix []byte) bool
- func Index(s, sep []byte) int
- func IndexByte(s []byte, c byte) int
- func IndexRune(s []byte, r rune) int
- func LastIndex(s, sep []byte) int
- func LastIndexByte(s []byte, c byte) int
- func Map(mapping func(r rune) rune, s []byte) []byte
- func Replace(s, old, new []byte, n int) []byte
- func Split(s, sep []byte) [][]byte
- func SplitAfterN(s, sep []byte, n int) [][]byte
- func Title(s []byte) []byte
- func ToLowerSpecial(c unicode.SpecialCase, s []byte) []byte
- func ToTitleSpecial(c unicode.SpecialCase, s []byte) []byte
- func ToUpperSpecial(c unicode.SpecialCase, s []byte) []byte
- func TrimFunc(s []byte, f func(r rune) bool) []byte
- func TrimLeftFunc(s []byte, f func(r rune) bool) []byte
- func TrimRight(s []byte, cutset string) []byte
- func TrimSpace(s []byte) []byte
- type Buffer
- func NewBufferString(s string) *Buffer
- func (b *Buffer) Cap() int
- func (b *Buffer) Len() int
- func (b *Buffer) Read(p []byte) (n int, err error)
- func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
- func (b *Buffer) ReadRune() (r rune, size int, err error)
- func (b *Buffer) Reset()
- func (b *Buffer) Truncate(n int)
- func (b *Buffer) UnreadRune() error
- func (b *Buffer) WriteByte(c byte) error
- func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
- Bugs
- Buffer.Grow
- Compare
- Contains
- ContainsRune
- Equal
- Fields
- HasPrefix
- Index
- IndexByte
- IndexRune
- LastIndex
- LastIndexByte
- Map
- Repeat
- Runes
- SplitAfter
- SplitN
- ToLower
- ToUpper
- TrimFunc
- TrimLeftFunc
- TrimRight
- TrimSpace
文件
Constants
Variables
- var ErrTooLarge = errors.("bytes.Buffer: too large")
如果内存不能再分配缓存空间保存数据就会把 ErrTooLarge 传递给 panic。
func Compare
- func Compare(a, b []byte)
Compare 比较连个字节切片并根据结果返回一个整数。(
a==b
时返回 0,a < b
时返回 -1,a > b
时返回 +1)。参数为 nil 默认为空切片。例:
// 通过和 0 进行比较来解释流程控制语句的含义
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
}
// 推荐使用 Equal 来判断等于的情况
if bytes.Equal(a, b) {
// a equal b
}
if !bytes.Equal(a, b) {
// a not equal b
}
例:
// 二进制搜索指定的字节切片
var needle []byte
var haystack [][]byte // 排序后
i := sort.Search(len(haystack), func(i int) bool {
// Return haystack[i] >= needle.
return bytes.Compare(haystack[i], needle) >= 0
})
if i < len(haystack) && bytes.Equal(haystack[i], needle) {
// Found it!
}
func
¶
- func Contains(b, subslice []) bool
Contains 判断 b 中是否包含 subslice。
例:
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(“”)))
// Output:
// true
// false
// true
// true
func ContainsAny
ContainsAny 判断 b 中是否包含 chars 中的任意 UTF-8 代码点
例:
fmt.Println(bytes.ContainsAny([]byte(“I like seafood.”), “fÄo!”))
fmt.Println(bytes.ContainsAny([]byte(“I like seafood.”), “去是伟大的.”))
fmt.Println(bytes.ContainsAny([]byte(“I like seafood.”), “”))
fmt.Println(bytes.ContainsAny([]byte(“”), “”))
// Output:
// true
// true
// false
// false
func ContainsRune
ContainsRune 判断 b 中是否包含 UTF-8 编码字节 rune。
例:
fmt.Println(bytes.ContainsRune([]byte(“I like seafood.”), ‘f’))
fmt.Println(bytes.ContainsRune([]byte(“I like seafood.”), ‘ö’))
fmt.Println(bytes.ContainsRune([]byte(“去是伟大的!”), ‘大’))
fmt.Println(bytes.ContainsRune([]byte(“去是伟大的!”), ‘!’))
fmt.Println(bytes.ContainsRune([]byte(“”), ‘@’))
// Output:
// true
// false
// true
// true
// false
func Count
- func Count(s, sep []byte)
Count 计算 s 中 sep 非重叠出现的次数。如果 sep 为空切片,Count 返回 1 + s 中 UTF-8 代码点的数量。
例:
fmt.Println(bytes.Count([]byte(“cheese”), []byte(“e”)))
fmt.Println(bytes.Count([]byte(“five”), []byte(“”))) // before & after each rune
// Output:
// 3
// 5
func
¶
- func Equal(a, b []) bool
Equal 在 a 和 b 长度相同并包含相同元素时返回 true。参数为 nil 时默认为空切片。
例:
fmt.Println(bytes.Equal([]byte(“Go”), []byte(“Go”)))
fmt.Println(bytes.Equal([]byte(“Go”), []byte(“C++”)))
// Output:
// true
// false
func EqualFold
- func EqualFold(s, t []byte)
EqualFold 判断 s 和 t 在 UTF-8 编码下忽略大小写时是否相等。
例:
fmt.Println(bytes.EqualFold([]byte(“Go”), []byte(“go”)))
// Output: true
func
¶
- func Fields(s []) [][]byte
Fields 会把 s 当作 UTF-8 代码点进行解析。它根据一个或多个空白符(unicode.IsSpace 定义)来分割 s 并返回分割结果切片,在 s 只包含空白符时返回空切片。
例:
fmt.Printf(“Fields are: %q”, bytes.Fields([]byte(“ foo bar baz “)))
// Output: Fields are: [“foo” “bar” “baz”]
func FieldsFunc
FieldsFunc 会把 s 当作 UTF-8 代码点进行解析。他根据满足
f(c)
的代码点分割 s 并返回分割结果切片。如果所有的代码点都满足 ,或者 len(s)==0
,会返回空切片。FieldsFunc 不保证 f(c)
的调用顺序,如果相同 c 返回不同结果,FieldsFunc 会崩溃。例:
f := func(c rune) bool {
return !unicode.IsLetter(c) && !unicode.IsNumber(c)
}
fmt.Printf(“Fields are: %q”, bytes.FieldsFunc([]byte(“ foo1;bar2,baz3…”), f))
// Output: Fields are: [“foo1” “bar2” “baz3”]
func
¶
- func HasPrefix(s, prefix []) bool
HasPrefix 判断 s 是否以 prefix 作为前缀。
例:
fmt.Println(bytes.HasPrefix([]byte(“Gopher”), []byte(“Go”)))
fmt.Println(bytes.HasPrefix([]byte(“Gopher”), []byte(“C”)))
fmt.Println(bytes.HasPrefix([]byte(“Gopher”), []byte(“”)))
// Output:
// true
// false
// true
func HasSuffix
- func HasSuffix(s, suffix []byte)
HasSuffix 判断 s 是否以 suffix 作为后缀。
例:
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(“”)))
// Output:
// true
// false
// false
// true
func
¶
- func Index(s, sep []) int
Index 返回 s 中第一次出现 sep 的位置,如果不存在 sep 返回 -1。
例:
fmt.Println(bytes.Index([]byte(“chicken”), []byte(“ken”)))
fmt.Println(bytes.Index([]byte(“chicken”), []byte(“dmr”)))
// Output:
// 4
// -1
IndexAny 会把 s 当作 UTF-8 代码点进行解析。它返回 s 中第一次出现 chars 中 Unicode 代码点的位置。如果 chars 为空或不存在返回 -1。
例:
fmt.Println(bytes.IndexAny([]byte(“chicken”), “aeiouy”))
fmt.Println(bytes.IndexAny([]byte(“crwth”), “aeiouy”))
// Output:
// 2
// -1
func IndexByte
IndexByte 返回 s 中第一次出现 c 的位置,如果不存在返回 -1。
例:
fmt.Println(bytes.IndexByte([]byte(“chicken”), byte(‘k’)))
fmt.Println(bytes.IndexByte([]byte(“chicken”), byte(‘g’)))
// Output:
// 4
// -1
func IndexFunc
IndexFunc 会把 s 当作 UTF-8 代码点进行解析。它返回 s 中第一个满足
f(c)
的代码点的位置,如果没有返回 -1。例:
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))
// Output:
// 7
// -1
func
¶
- func IndexRune(s [], r rune)
IndexFunc 会把 s 当作 UTF-8 代码点进行解析。它返回 s 中第一次出现 rune 的位置。如果没有返回 -1。如果 r 为 utf8.RuneError,它返回第一次出现无效 UTF-8 字符序列的位置。
例:
fmt.Println(bytes.IndexRune([]byte(“chicken”), ‘k’))
fmt.Println(bytes.IndexRune([]byte(“chicken”), ‘d’))
// Output:
// 4
// -1
func
¶
- func Join(s [][], sep []byte) []
Join 会把 s 中的切片用 sep 连接起来并返回。sep 会出现在 s 的每个元素之间。
例:
s := [][]byte{[]byte(“foo”), []byte(“bar”), []byte(“baz”)}
fmt.Printf(“%s”, bytes.Join(s, []byte(“, “)))
// Output: foo, bar, baz
func
¶
- func LastIndex(s, sep []) int
LastIndex 返回 s 中最后一次出现 sep 的位置,如果不存在返回 -1。
例:
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”)))
// Output:
// 0
// 3
// -1
func LastIndexAny
LastIndexAny 会把 s 当作 UTF-8 代码点进行解析。它返回 s 最后一次出现 chars 中 Unicode 代码点的位置。如果没有或 chars 为空返回 -1。
例:
fmt.Println(bytes.LastIndexAny([]byte(“go gopher”), “MüQp”))
fmt.Println(bytes.LastIndexAny([]byte(“go 地鼠”), “地大”))
fmt.Println(bytes.LastIndexAny([]byte(“go gopher”), “z,!.”))
// Output:
// 5
// 3
// -1
func LastIndexByte
LastIndexByte 返回 s 中最后一次出现 c 的位置,如果不存在返回 -1。
例:
fmt.Println(bytes.LastIndexByte([]byte(“go gopher”), byte(‘g’)))
fmt.Println(bytes.LastIndexByte([]byte(“go gopher”), byte(‘r’)))
fmt.Println(bytes.LastIndexByte([]byte(“go gopher”), byte(‘z’)))
// Output:
// 3
// 8
// -1
func LastIndexFunc
LastIndexFunc 会把 s 当作 UTF-8 代码点进行解析。它返回最后一个满足
f(c)
的 Unicode 代码点的位置,如果没有返回 -1。例:
fmt.Println(bytes.LastIndexFunc([]byte(“go gopher!”), unicode.IsLetter))
fmt.Println(bytes.LastIndexFunc([]byte(“go gopher!”), unicode.IsPunct))
fmt.Println(bytes.LastIndexFunc([]byte(“go gopher!”), unicode.IsNumber))
// Output:
// 8
// 9
// -1
func
¶
Map 返回每个字节都被 mapping 处理过的 s 切片的拷贝。如果 mappding 返回负数该字符不会出现在结果切片中。s 中的字符会以 UTF-8 代码点的形式进行解析。
例:
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…”)))
// Output: ‘Gjnf oevyyvt naq gur fyvgul tbcure…
func Repeat
Repeat 返回重复 count 次 b 的新切片。
如果 count 为负数或者 (len(b) count) 溢出函数会 panic。
例:
fmt.Printf(“ba%s”, bytes.Repeat([]byte(“na”), 2))
// Output: banana
func Replace
Replace 将 s 中的前 n 个 old 替换成 new 并作为新切片返回。如果 old 为空,它会匹配切片de1起点和每个 UTF-8 序列的结尾,对于 k 个 rune 的切片会替换 k + 1 次。如果 n<0,不会限制替换次数。
例:
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))
// Output:
// oinky oinky oink
// moo moo moo
func Runes
- func Runes(s []byte) []
Runes 会把 s 当作 UTF-8 代码点进行解析。它返回 s 对应的 rune(Unicode 代码点)切片。
例:
rs := bytes.Runes([]byte(“go gopher”))
for _, r := range rs {
fmt.Printf(“%#U\n”, r)
}
// Output:
// U+0067 ‘g’
// U+006F ‘o’
// U+0020 ‘ ‘
// U+0067 ‘g’
// U+006F ‘o’
// U+0070 ‘p’
// U+0068 ‘h’
// U+0065 ‘e’
// U+0072 ‘r’
func
¶
- func Split(s, sep []) [][]byte
Split 根据 sep 分割 s 并返回分割结果组成的切片。如果 sep 为空,Split 会分割每个 UTF-8 序列。它和 count 等于 -1 的 SplitN 相同。
例:
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”)))
// Output:
// [“a” “b” “c”]
// [“” “man “ “plan “ “canal panama”]
// [“ “ “x” “y” “z” “ “]
// [“”]
func SplitAfter
SplitAfter 从 s 中的每个 sep 后的位置分割 s 并返回分割结果组成的切片。如果 sep 为空,SplitAfter 会分割每个 UTF-8 序列。它和 count 为 -1 的 SplitAfterN 相同。
例:
fmt.Printf(“%q\n”, bytes.SplitAfter([]byte(“a,b,c”), []byte(“,”)))
// Output: [“a,” “b,” “c”]
func
¶
- func SplitAfterN(s, sep [], n int) [][]
SplitAfterN slices s into subslices after each instance of sep and returns a
slice of those subslices. If sep is empty, SplitAfterN splits after each UTF-8
sequence. The count determines the number of subslices to return:
SplitAfterN 从 s 中的每个 sep 后的位置分割 s 并返回分割结果组成的切片。如果 sep 为空,SplitAfter 会分割每个 UTF-8 序列。count 决定返回结果元素的数量:
n > 0: 最多 n 个元素。最后一个元素包含 s 中未分割的部分。
n == 0: 返回 nil。
n < 0: 不限制返回结果长度。
例:
fmt.Printf(“%q\n”, bytes.SplitAfterN([]byte(“a,b,c”), []byte(“,”), 2))
// Output: [“a,” “b,c”]
func
¶
- func SplitN(s, sep [], n int) [][]
SplitN 根据 sep 分割 s 并返回分割结果组成的切片。如果 sep 为空,Split 会分割每个 UTF-8 序列。count 决定返回结果元素的数量:
n > 0: 最多 n 个元素。最后一个元素包含 s 中未分割的部分。
n == 0: 返回 nil。
n < 0: 不限制返回结果长度。
例:
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)
// Output:
// [“a” “b,c”]
// [] (nil = true)
- func Title(s []) []byte
Title 把 s 做为 UTF-8 编码字节切片并返回单词首字母为 Unicode 字符对应 Title 形式的切片。
BUG(rsc): Title 使用的规则不会处理 Unicode 的标点符号。
例:
fmt.Printf(“%s”, bytes.Title([]byte(“her royal highness”)))
// Output: Her Royal Highness
func ToLower
- func ToLower(s []byte) []
ToLower 把 s 做为 UTF-8 编码字节切片返回由所有 Unicode 字符对应的小写形式组成的切片。
例:
fmt.Printf(“%s”, bytes.ToLower([]byte(“Gopher”)))
// Output: gopher
func
¶
- func ToLowerSpecial(c .SpecialCase, s []) []byte
ToLowerSpecial 把 s 做为 UTF-8 编码字节切片返回根据指定规则 c 由所有 Unicode 字符对应的小写形式组成的切片。
func
¶
- func ToTitle(s []) []byte
ToTitle 把 s 做为 UTF-8 编码字节切片并返回所有 Unicode 字符对应的 Title 形式组成的切片。
例:
fmt.Printf(“%s\n”, bytes.ToTitle([]byte(“loud noises”)))
fmt.Printf(“%s\n”, bytes.ToTitle([]byte(“хлеб”)))
// Output:
// LOUD NOISES
// ХЛЕБ
func ToTitleSpecial
ToTitleSpecial 把 s 做为 UTF-8 编码字节切片并根据指定规则 c 返回所有 Unicode 字符对应的 Title 形式组成的切片。
func ToUpper
- func ToUpper(s []byte) []
ToTitle 把 s 做为 UTF-8 编码字节切片并返回所有 Unicode 字符对应的大写形式组成的切片。
例:
fmt.Printf(“%s”, bytes.ToUpper([]byte(“Gopher”)))
// Output: GOPHER
func
¶
- func ToUpperSpecial(c .SpecialCase, s []) []byte
ToUpperSpecial 把 s 做为 UTF-8 编码字节切片并根据指定规则 c 返回所有 Unicode 字符对应的大写形式组成的切片。
func
¶
- func Trim(s [], cutset string) []
Trim 会返回 s 的一个子串,它不包含开头和结尾的 cutset。
例:
fmt.Printf(“[%q]”, bytes.Trim([]byte(“ !!! Achtung! Achtung! !!! “), “! “))
// Output: [“Achtung! Achtung”]
func
¶
TrimFunc 去掉 s 中开头和结尾满足 的 UTF-8 代码点。
例:
fmt.Println(string(bytes.TrimFunc([]byte(“go-gopher!”), unicode.IsLetter)))
fmt.Println(string(bytes.TrimFunc([]byte(“\”go-gopher!\””), unicode.IsLetter)))
fmt.Println(string(bytes.TrimFunc([]byte(“go-gopher!”), unicode.IsPunct)))
fmt.Println(string(bytes.TrimFunc([]byte(“1234go-gopher!567”), unicode.IsNumber)))
// Output:
// -gopher!
// “go-gopher!”
// go-gopher
// go-gopher!
func TrimLeft
TrimLeft 去掉 s 开头 cutset 包含的 UTF-8 代码点。
例:
fmt.Print(string(bytes.TrimLeft([]byte(“453gopher8257”), “0123456789”)))
// Output:
// gopher8257
func TrimLeftFunc
TrimLeftFunc 会把 s 最为 UTF-8 编码字节处理并去掉开头满足
f(c)
的 UTF-8 代码点并返回。例:
fmt.Println(string(bytes.TrimLeftFunc([]byte(“go-gopher”), unicode.IsLetter)))
fmt.Println(string(bytes.TrimLeftFunc([]byte(“go-gopher!”), unicode.IsPunct)))
fmt.Println(string(bytes.TrimLeftFunc([]byte(“1234go-gopher!567”), unicode.IsNumber)))
// Output:
// -gopher
// go-gopher!
// go-gopher!567
func
¶
- func TrimPrefix(s, prefix []) []byte
TrimPrefix 去掉 s 的 prefix 前缀并返回,如果 s 没有 prefix 前缀,s 直接返回。
例:
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
TrimRight 去掉 s 中所有 cutset 中的 UTF-8 代码点并返回。
例:
fmt.Print(string(bytes.TrimRight([]byte(“453gopher8257”), “0123456789”)))
// Output:
// 453gopher
func TrimRightFunc
TrimRightFunc 去掉 s 中满足
f(c)
的 UTF-8 代码点并返回。例:
fmt.Println(string(bytes.TrimRightFunc([]byte(“go-gopher”), unicode.IsLetter)))
fmt.Println(string(bytes.TrimRightFunc([]byte(“go-gopher!”), unicode.IsPunct)))
fmt.Println(string(bytes.TrimRightFunc([]byte(“1234go-gopher!567”), unicode.IsNumber)))
// Output:
// go-
// go-gopher
// 1234go-gopher!
func
¶
- func TrimSpace(s []) []byte
TrimSpace 去掉 s 中开头和结尾的 Unicode 定义的空白符并返回。
例:
fmt.Printf(“%s”, bytes.TrimSpace([]byte(“ \t\n a lone gopher \n\t\r\n”)))
// Output: a lone gopher
func TrimSuffix
- func TrimSuffix(s, suffix []byte) []
TrimSuffix 返回去掉 suffix 后缀的 s 。如果 s 没有 suffix 后缀,会直接返回 s。
例:
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!
type
¶
- type Buffer struct {
// contains filtered or unexported fields
}
Buffer 是一个可以读取或写入数据的动态尺寸的字节缓存区。Buffer 的零值是一个可以使用的缓冲区。
例:
var b bytes.Buffer // Buffer 不需要初始化
b.Write([]byte(“Hello “))
fmt.Fprintf(&b, “world!”)
b.WriteTo(os.Stdout)
// Output: Hello world!
例:
// Buffer 将字符串或者 []byte 放入 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)
NewBuffer 把 buf 做为初始内容来创建和初始化一个新的 Buffer。新的 Buffer 接管 buf,并且调用者不应该在调用后再使用 buf。NewBuffer 主要为了准备一块缓冲区读取现存数据。它也可以用来调整写入内部缓冲区的大小。如果想这么做,buf 应是一个指定容积长度为零的切片。
In most cases, new(Buffer) (or just declaring a Buffer variable) is sufficient
to initialize a Buffer.
func NewBufferString
- func NewBufferString(s string)
NewBufferString 把字符串 s 作为初始内容创建并初始化一个新的 Buffer。它主要为了准备一块缓冲区来读取现在的字符串。
大多数情况下,new(Buffer) (或者只声明一个 Buffer 变量)就可以初始化一个 Buffer。
func (Buffer) Bytes
- func (b Buffer) Bytes() []
Bytes 返回长度 b.Len() 对应的未读缓存的切片。切片在下一次缓存修改(例如:Read,Write,Reset 或 Truncate)之前都有效。切片至少在下一次缓存改变前是引用缓存数据的,所以改变切片内容会影响之后的读取操作。
func (Buffer) Cap
- func (b Buffer) Cap()
Cap 返回缓存底层字节切片的容积。它是分配给缓存的空间大小。
func (Buffer) Grow
- func (b Buffer) Grow(n )
Grow 会为缓存增加 n 字节的容积。在调用
Grow(n)
之后,不用分配额外空间就可以至少向缓存写入 n 字节的数据。如果 n 为负数,Grow 会 panic。如果缓存不会再增加会 panic 并携带 ErrTooLarge 错误。例:
var b bytes.Buffer
b.Grow(64)
bb := b.Bytes()
b.Write([]byte(“64 bytes or fewer”))
fmt.Printf(“%q”, bb[:b.Len()])
// Output: “64 bytes or fewer”
func (Buffer)
¶
- func (b ) Len() int
Len 返回缓存中未读的字节数;
b.Len()==len(b.Bytes())
。func (Buffer)
¶
- func (b ) Next(n int) []
Next 返回一个包含缓存中下 n 字节的切片,就像 Read 返回的字节一样。如果缓存中含有不到 n 个字符,Next 会把它们全部返回。返回的切片在下一次的读写调用之前有效。
func (Buffer) Read
Read 从缓存中读取下 len(p) 个字节或者直到缓存最后。返回值 n 为读取到的字节数。如果缓存会有数据返回,err 为 io.EOF(除非 len(p) 为 0);否则 err 为 nil。
func (Buffer) ReadByte
ReadByte 读取并返回缓存的下一个字节,如果没有有效字节返回 io.EOF。
func (Buffer) ReadBytes
ReadBytes 会读取缓存中直到第一个 delim 字节的数据,返回的字节切片包括 delim 和它之前的数据。如果 ReadBytes 在找到 delim 之前发生错误,会返回发生错误之前读取的数据和错误本身(一般为 io.EOF)。只有在数据没有以 delim 结束的时候返回的 err != nil。
ReadFrom 从 r 中读取一直到 EOF 的数据并将数据追加到缓存中,缓存的大小会按需增加。返回值 n 为读取的字节数。除了 io.EOF 以外任何读取时发生的错误都会返回。如果缓存变得过大 Write 会 panic 并附带 ErrTooLarge 错误。
func (Buffer)
¶
ReadRune 读取并返回缓存中的下一个 UTF-8 代码点。如果没有有效字节,返回的错误为 io.EOF。如果字节为无效的 UFT-8 编码字节,返回 U+FFFD, 1。
func (Buffer)
¶
ReadString 会读取缓存中直到第一个 delim 字节的数据,返回的字符串包括 delim 和它之前的数据。如果 ReadString 在找到 delim 之前发生错误,会返回发生错误之前读取的数据和错误本身(一般为 io.EOF)。只有在数据没有以 delim 结束的时候返回的 err != nil。
func (Buffer)
¶
- func (b ) Reset()
Reset 会清空缓存但是保留底层的存储空间用来接收写入的内容。Reset 和 Truncate(0) 相同。
func (Buffer) String
- func (b Buffer) String()
String 把缓存的未读部分作为字符串返回。如果缓存是一个 nil 指针,它会返回
更有效的构建字符串可以使用 strings.Builder 类型。
func (Buffer) Truncate
- func (b Buffer) Truncate(n )
Truncate 丢弃缓存中除前 n 个未读字节以外的其他内容并继续使用原来的存储空间。如果 n 为负数或者大于缓存长度会 panic。
func (Buffer) UnreadByte
- func (b Buffer) UnreadByte()
UnreadByte 将最近一次成功的读取操作返回的字节标记为未读。如果在最近一次读取之后发生写入操作,或者最近一次读取操作返回 error,或着读取操作读取了 0 字节,那么 UnreadByte 就会返回错误。
func (Buffer) UnreadRune
- func (b Buffer) UnreadRune()
UnreadRune 将 ReadRune 返回的最近一个 rune 标记为未读。如果针对缓存最近的读取或写入操作没有成功,UnreadRune 会返回错误(在这方面它比 UnreadByte 更加严格,UnreadByte 会把最近任何一个读取操作的字符标记为未读)。
func (Buffer) Write
Write 将 p 追加进缓存,缓存会按需增大。返回值 n 为 p 的长度;err 一直为 nil。如果缓存变得过大 Write 会 panic 并附带 ErrTooLarge 错误。
func (Buffer) WriteByte
WriteByte 把 c 追加进缓存,缓存会按需增大。返回的错误一直为 nil,它主要是为了匹配 bufio.Writer 的 WriteByte。
如果缓存变得过大 WriteByte 会 panic 并附带 ErrTooLarge 错误。
func (Buffer)
¶
WriteRune 把 UTF-8 代码点 r 追加进缓存,并返回它的长度和错误(固定为 nil 为了匹配 bufio.Writer 的 WriteRune 接口)。缓存会按需增大;如果缓存变得过大 WriteRune 会 panic 并附带 ErrTooLarge 错误。
func (Buffer)
¶
WriteString 会把 s 的内容追加给缓存,它会在需要的时候增加缓存大小。返回值 n 为 s 的长度;err 总是为 nil。如果缓存变得太大,WriteString 会 panic 并附带 ErrTooLarge 错误。
WriteTo 将数据写入 w 直到缓存已满或发生错误。返回值 n 为写入的字节数;它一般都是 int,不过为了满足 io.WriteTo 接口所以为 int64 类型。写入当中发生的错误都会返回给调用者。
- type Reader struct {
// contains filtered or unexported fields
}
Reader 实现了 io.Reader, io.ReaderAt, io.WriterTo, io.Seeker,io.ByteScanner 和 io.RuneScanner 接口来读取字节切片。与 Buffer 不同它是只读的并且支持 seeking。
func NewReader
- func NewReader(b []byte)
NewReader 返回一个读取 b 的新 Reader。
func (Reader) Len
- func (r Reader) Len()
Len 返回 Reader 还未读取的切片长度。
例:
fmt.Println(bytes.NewReader([]byte(“Hi!”)).Len())
fmt.Println(bytes.NewReader([]byte(“こんにちは!”)).Len())
// Output:
// 3
// 16
func (Reader)
¶
Read 实现了 io.Reader 接口。
func (Reader)
¶
ReadAt 实现了 io.ReaderAt 接口。
func (Reader) ReadByte
ReadByte 实现了 io.ByteReader 接口。
func (Reader)
¶
ReadRune 实现了 io.RuneReader 接口。
func (Reader)
¶
- func (r ) Reset(b []byte)
Reset 重置 Reader 来读取 b。
func (Reader)
¶
Seek 实现了 io.Seeker 接口。
func (Reader) Size
- func (r Reader) Size()
Size 返回底层字节数组的长度。Size 是 ReadAt 能够读取的有效字节数。它的返回值是固定的不受其他方法影响
func (Reader) UnreadByte
- func (r Reader) UnreadByte()
UnreadByte 为 ReadByte 实现了 io.ByteScanner 接口。
func (Reader) UnreadRune
- func (r Reader) UnreadRune()
UnreadRune 为 ReadRune 实现了 io.RuneScanner 接口。
WriteTo 实现了 io.WriterTo 接口。
Bugs
- Title 使用的规则不会处理 Unicode 标点符号。