Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.

Вернуться к обычному просмотру страницы.

Пакет bytes языка программирования Go

Пакет bytes реализует функции для работы с байтовыми фрагментами. Он аналогичен средствам пакета strings.

    Константы

    const MinRead = 512
    

    MinRead — минимальный размер фрагмента, передаваемый вызову Buffer.Read из Buffer.ReadFrom. Если буфер содержит не менее MinRead байт сверх того, что требуется для хранения содержимого r, Buffer.ReadFrom не будет увеличивать базовый буфер.

    Переменные

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

    ErrTooLarge передается в panic, если не удается выделить память для хранения данных в буфере.

    Функции

    func Clone

    func Clone(b []byte) []byte
    

    Clone возвращает копию b[:len(b)]. Результат может иметь дополнительный неиспользованный объем. Clone(nil) возвращает nil.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	b := []byte("abc")
    	clone := bytes.Clone(b)
    	fmt.Printf("%s\n", clone)
    	clone[0] = 'd'
    	fmt.Printf("%s\n", b)
    	fmt.Printf("%s\n", clone)
    }
    
    Output:
    
    abc
    abc
    dbc

    func Compare

     func Compare(a, b []byte) int
    

    Compare возвращает целое число, сравнивая два лексикографических фрагмента байтов. Результат будет равен 0, если a == b, -1, если a < b, и +1, если a > b. Аргумент nil эквивалентен пустому фрагменту.

    Пример
    package main
    
    import (
    	"bytes"
    )
    
    func main() {
    	// 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
    	}
    }
    
    Пример Поиск
    package main
    
    import (
    	"bytes"
    	"slices"
    )
    
    func main() {
    	// Binary search to find a matching byte slice.
    	var needle []byte
    	var haystack [][]byte // Assume sorted
    	_, found := slices.BinarySearchFunc(haystack, needle, bytes.Compare)
    	if found {
    		// Found it!
    	}
    }
    

    func Contains

     func Contains(b, subslice []byte) bool
    

    Contains сообщает, находится ли подфрагмент в пределах 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("")))
    }
    
    Output:
    
    true
    false
    true
    true

    func ContainsAny

     func ContainsAny(b []байт, chars string) bool
    

    ContainsAny сообщает, находится ли какая-либо из кодовых точек в кодировке UTF-8 в chars в пределах b.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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 ContainsFunc

     func ContainsFunc(b []byte, f func(rune) bool) bool
    

    ContainsFunc сообщает, удовлетворяет ли f(r) любая из кодовых точек r в кодировке UTF-8 в пределах b.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	f := func(r rune) bool {
    		return r >= 'a' && r <= 'z'
    	}
    	fmt.Println(bytes.ContainsFunc([]byte("HELLO"), f))
    	fmt.Println(bytes.ContainsFunc([]byte("World"), f))
    }
    
    Output:
    
    false
    true

    func ContainsRune

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

    ContainsRune сообщает, содержится ли руна в UTF-8-кодированном байтовом фрагменте b.

    func Count

     func Count(s, sep []byte) int
    

    Count подсчитывает количество непересекающихся экземпляров sep в s. Если sep - пустой фрагмент, Count возвращает 1 + количество кодовых точек в s, закодированных в UTF-8.

    Пример
    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
    }
    
    Output:
    
    3
    5

    func Cut

     func Cut(s, sep []byte) (before, after []byte, found bool)
    

    Cut разрезает s вокруг первого экземпляра sep, возвращая текст до и после sep. Результат found сообщает, появляется ли sep в s. Если sep не появляется в s, cut возвращает s, nil, false.

    Cut возвращает фрагменты исходного фрагмента s, а не его копии.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	show := func(s, sep string) {
    		before, after, found := bytes.Cut([]byte(s), []byte(sep))
    		fmt.Printf("Cut(%q, %q) = %q, %q, %v\n", s, sep, before, after, found)
    	}
    	show("Gopher", "Go")
    	show("Gopher", "ph")
    	show("Gopher", "er")
    	show("Gopher", "Badger")
    }
    
    Output:
    
    Cut("Gopher", "Go") = "", "pher", true
    Cut("Gopher", "ph") = "Go", "er", true
    Cut("Gopher", "er") = "Goph", "", true
    Cut("Gopher", "Badger") = "Gopher", "", false

    func CutPrefix

     func CutPrefix(s, prefix []byte) (after []byte, found bool)
    

    CutPrefix возвращает s без предоставленного ведущего префиксного байтового фрагмента и сообщает, найден ли префикс. Если s не начинается с префикса, CutPrefix возвращает s, false. Если префикс - это пустой байтовый фрагмент, CutPrefix возвращает s, true.

    CutPrefix возвращает фрагменты исходного фрагмента s, а не его копии.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	show := func(s, sep string) {
    		after, found := bytes.CutPrefix([]byte(s), []byte(sep))
    		fmt.Printf("CutPrefix(%q, %q) = %q, %v\n", s, sep, after, found)
    	}
    	show("Gopher", "Go")
    	show("Gopher", "ph")
    }
    
    Output:
    
    CutPrefix("Gopher", "Go") = "pher", true
    CutPrefix("Gopher", "ph") = "Gopher", false

    func CutSuffix

     func CutSuffix(s, suffix []byte) (before []byte, found bool)
    

    CutSuffix возвращает s без предоставленного завершающего суффикса байтового фрагмента и сообщает, найден ли суффикс. Если s не заканчивается суффиксом, CutSuffix возвращает s, false. Если суффикс - пустой байтовый фрагмент, CutSuffix возвращает s, true.

    CutSuffix возвращает фрагменты исходного фрагмента s, а не его копии.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	show := func(s, sep string) {
    		before, found := bytes.CutSuffix([]byte(s), []byte(sep))
    		fmt.Printf("CutSuffix(%q, %q) = %q, %v\n", s, sep, before, found)
    	}
    	show("Gopher", "Go")
    	show("Gopher", "er")
    }
    
    Output:
    
    CutSuffix("Gopher", "Go") = "Gopher", false
    CutSuffix("Gopher", "er") = "Goph", true

    func Equal

     func Equal(a, b []byte) bool
    

    Equal сообщает, имеют ли a и b одинаковую длину и содержат ли они одинаковые байты. Аргумент nil эквивалентен пустому фрагменту.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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) bool
    

    EqualFold сообщает, равны ли s и t, интерпретируемые как строки UTF-8, при простом преобразовании регистра Юникода, которое является более общей формой нечувствительности к регистру.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(bytes.EqualFold([]byte("Go"), []byte("go")))
    }
    Output:
    
    true

    func Fields

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

    Fields интерпретирует s как последовательность кодовых точек, закодированных в UTF-8. Он разделяет срез s вокруг каждого экземпляра одного или нескольких последовательных пробельных символов, как определено в unicode.IsSpace, возвращая срез подсрезов s или пустой срез, если s содержит только пробельные символы.

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

    func FieldsFunc

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

    FieldsFunc интерпретирует s как последовательность кодовых точек, закодированных в UTF-8. Он разбивает срез s на каждом проходе кодовых точек c, удовлетворяющих f(c), и возвращает срез подсрезов s. Если все кодовые точки в s удовлетворяют f(c) или len(s) == 0, возвращается пустой срез.

    FieldsFunc не дает никаких гарантий относительно порядка вызова f(c) и предполагает, что f всегда возвращает одно и то же значение для данного c.

    Пример
    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))
    }
    
    Output:
    
    Fields are: ["foo1" "bar2" "baz3"]

    func FieldsFuncSeq

     func FieldsFuncSeq(s []byte, f func(rune) bool) iter.Seq[[]byte]
    

    FieldsFuncSeq возвращает итератор над подфрагментами s, разбитыми по последовательностям кодовых точек Unicode, удовлетворяющих f(c). Итератор возвращает те же подфрагменты, которые были бы возвращены FieldsFunc(s), но без создания нового фрагмента, содержащего подфрагменты.

    func FieldsSeq

     func FieldsSeq(s []byte) iter.Seq[[]byte]
    

    FieldsSeq возвращает итератор по подсрезам s, разделённым пробельными символами (как определено в unicode.IsSpace). Итератор возвращает те же подсрезы, что и функция Fields(s), но без создания нового среза.

    func HasPrefix

    func HasPrefix(s, prefix []byte) bool
    

    HasPrefix проверяет, начинается ли байтовый срез s с prefix.

    Пример
    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("")))
    
    Output:
    
    true
    false
    true

    func HasSuffix

    func HasSuffix(s, suffix []byte) bool
    

    HasSuffix проверяет, заканчивается ли байтовый срез s на suffix.

    Пример
    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("")))
    }
    
    Output:
    
    true
    false
    false
    true

    func Index

    func Index(s, sep []byte) int
    

    Index возвращает индекс первого вхождения sep в s или -1, если sep отсутствует в s.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(bytes.Index([]byte("chicken"), []byte("ken")))
    	fmt.Println(bytes.Index([]byte("chicken"), []byte("dmr")))
    }
    Output:
    
    4
    -1

    func IndexAny

    func IndexAny(s []byte, chars string) int
    
    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(bytes.IndexAny([]byte("chicken"), "aeiouy"))
    	fmt.Println(bytes.IndexAny([]byte("crwth"), "aeiouy"))
    }
    
    
    Output:
    
    2
    -1

    IndexAny интерпретирует s как последовательность UTF-8 кодовых точек. Возвращает байтовый индекс первого вхождения любого символа из chars в s. Возвращает -1, если chars пуст или нет совпадений.

    func IndexByte

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

    IndexByte возвращает индекс первого вхождения байта c в b или -1, если c отсутствует в b.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(bytes.IndexByte([]byte("chicken"), byte('k')))
    	fmt.Println(bytes.IndexByte([]byte("chicken"), byte('g')))
    }
    Output:
    
    4
    -1

    func IndexFunc

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

    IndexFunc интерпретирует s как последовательность UTF-8 кодовых точек. Возвращает байтовый индекс первой кодовой точки, удовлетворяющей условию f(c), или -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))
    }
    
    Output:
    
    7
    -1

    func IndexRune

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

    IndexRune интерпретирует s как последовательность UTF-8 кодовых точек. Возвращает байтовый индекс первого вхождения руны r. Если 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'))
    }
    Output:
    
    4
    -1

    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(", ")))
    }
    
    Output:
    
    foo, bar, baz

    func LastIndex

    func LastIndex(s, sep []byte) int
    
    Пример
    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")))
    }
    
    Output:
    
    0
    3
    -1

    LastIndex возвращает индекс последнего экземпляра sep в s или -1, если sep отсутствует в s.

    func LastIndexAny

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

    LastIndexAny интерпретирует s как последовательность кодовых точек Unicode в кодировке UTF-8. Возвращает индекс байта последнего вхождения в s любой из кодовых точек Unicode в chars. Возвращает -1, если chars пуст или если нет общей кодовой точки.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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

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

    LastIndexByte возвращает индекс последнего экземпляра c в s или -1, если c отсутствует в s.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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

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

    LastIndexFunc интерпретирует s как последовательность кодовых точек, закодированных в UTF-8. Он возвращает индекс байта в s последней кодовой точки Unicode, удовлетворяющей f(c), или -1, если таковой нет.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	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 Lines

     func Lines(s []byte) iter.Seq[[]byte]
    

    Lines возвращает итератор по строкам, завершающимся символом новой строки, в байтовом срезе s. Строки, возвращаемые итератором, включают в себя завершающие символы новой строки. Если s пустой, итератор не возвращает никаких строк. Если s не заканчивается символом новой строки, последняя возвращаемая строка не будет заканчиваться символом новой строки. Возвращает итератор однократного использования.

    func Map

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

    Map возвращает копию байтового среза s со всеми символами, измененными в соответствии с функцией отображения. Если отображение возвращает отрицательное значение, символ удаляется из байтового среза без замены. Символы в s и выводе интерпретируются как кодовые точки, закодированные в UTF-8.

    Пример
    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\n", bytes.Map(rot13, []byte("'Twas brillig and the slithy gopher...")))
    }
    Output:
    
    'Gjnf oevyyvt naq gur fyvgul tbcure...

    func Repeat

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

    Repeat возвращает новый байтовый срез, состоящий из count копий b.

    Он вызывает панику, если count отрицательно или если результат (len(b) * count) переполняется.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("ba%s", bytes.Repeat([]byte("na"), 2))
    }
    
    Output:
    
    banana

    func Replace

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

    Replace возвращает копию фрагмента s с первыми n непересекающимися экземплярами old, замененными на new. Если old пуст, то он совпадает в начале фрагмента и после каждой последовательности UTF-8, что позволяет получить до k+1 замен для k-рангового фрагмента. Если 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))
    }
    Output:
    
    oinky oinky oink
    moo moo moo

    func ReplaceAll

     func ReplaceAll(s, old, new []byte) []byte
    

    ReplaceAll возвращает копию фрагмента s со всеми непересекающимися экземплярами old, замененными на new. Если old пуст, то совпадение происходит в начале фрагмента и после каждой последовательности UTF-8, что позволяет получить до k+1 замен для фрагмента длиной в k строк.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%s\n", bytes.ReplaceAll([]byte("oink oink oink"), []byte("oink"), []byte("moo")))
    }
    
    Output:
    
    moo moo moo

    func Runes

     func Runes(s []byte) []rune
    

    Runes интерпретирует s как последовательность кодовых точек в кодировке UTF-8. Она возвращает фрагмент рун (кодовых точек Юникода), эквивалентный s.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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 Split

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

    Split разбивает s на все подфрагменты, разделенные sep, и возвращает фрагмент подфрагментов между этими разделителями. Если sep пуст, Split разделяет после каждой последовательности UTF-8. Это эквивалентно SplitN с числом -1.

    Для разбиения вокруг первого экземпляра разделителя смотрите Cut.

    Пример
    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")))
    }
    
    Output:
    
    ["a" "b" "c"]
    ["" "man " "plan " "canal panama"]
    [" " "x" "y" "z" " "]
    [""]

    func SplitAfter

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

    SplitAfter разбивает s на все подфрагменты после каждого экземпляра sep и возвращает фрагмент этих подфрагментов. Если sep пуст, SplitAfter разбивает после каждой последовательности UTF-8. Это эквивалентно SplitAfterN с количеством -1.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%q\n", bytes.SplitAfter([]byte("a,b,c"), []byte(",")))
    }
    
    Output:
    
    ["a," "b," "c"]

    func SplitAfterN

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

    SplitAfterN разбивает s на подфрагменты после каждого экземпляра sep и возвращает фрагмент этих подфрагментов. Если sep пуст, SplitAfterN разбивает после каждой последовательности UTF-8. Параметр count определяет количество возвращаемых подфрагментов:

    • n > 0: не более n подфрагментов; последний подфрагмент будет нерасщепленным остатком;
    • n == 0: результат равен nil (нулевые подмножества);
    • n < 0: все поддоли.
    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%q\n", bytes.SplitAfterN([]byte("a,b,c"), []byte(","), 2))
    }
    
    Output:
    
    ["a," "b,c"]

    func SplitAfterSeq

     func SplitAfterSeq(s, sep []byte) iter.Seq[[]byte]
    

    SplitAfterSeq возвращает итератор по подфрагментам s, разделенным после каждого экземпляра sep. Итератор дает те же подфрагменты, которые были бы возвращены SplitAfter(s, sep), но без построения нового фрагмента, содержащего подфрагменты. Возвращается одноразовый итератор.

    func SplitN

     func SplitN(s, sep []байт, n int) [][]байт
    

    SplitN разбивает s на подфрагменты, разделенные sep, и возвращает фрагмент подфрагментов между этими разделителями. Если sep пуст, SplitN разбивает после каждой последовательности UTF-8. Параметр count определяет количество возвращаемых подфрагментов:

    • n > 0: не более n подфрагментов; последний подфрагмент будет нерасщепленным остатком;
    • n == 0: результат равен nil (нулевые подмножества);
    • n < 0: все подфрагменты.

    Для разбиения вокруг первого экземпляра разделителя смотрите Cut.

    Пример
    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)
    }
    Output:
    
    ["a" "b,c"]
    [] (nil = true)

    func SplitSeq

     func SplitSeq(s, sep []byte) iter.Seq[[]byte]
    

    SplitSeq возвращает итератор по всем подфрагментам s, разделенным sep. Итератор дает те же подфрагменты, которые были бы возвращены функцией Split(s, sep), но без построения нового фрагмента, содержащего эти подфрагменты. Возвращается одноразовый итератор.

    func Title (устарело)

    func ToLower

     func ToLower(s []byte) []byte
    

    ToLower возвращает копию байтового фрагмента s со всеми буквами Юникода, переведенными в нижний регистр.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%s", bytes.ToLower([]byte("Gopher")))
    }
    
    Output:
    
    gopher

    func ToLowerSpecial

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

    ToLowerSpecial обрабатывает s как байт в кодировке UTF-8 и возвращает копию со всеми буквами Юникода, переведенными в нижний регистр, отдавая приоритет правилам специального регистра.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	str := []byte("AHOJ VÝVOJÁRİ GOLANG")
    	totitle := bytes.ToLowerSpecial(unicode.AzeriCase, str)
    	fmt.Println("Original : " + string(str))
    	fmt.Println("ToLower : " + string(totitle))
    }
    Output:
    
    Original : AHOJ VÝVOJÁRİ GOLANG
    ToLower : ahoj vývojári golang

    func ToTitle

     func ToTitle(s []byte) []byte
    

    ToTitle обрабатывает s как байт в кодировке UTF-8 и возвращает его копию со всеми буквами Юникода, отображенными в регистр заголовка.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%s\n", bytes.ToTitle([]byte("loud noises")))
    	fmt.Printf("%s\n", bytes.ToTitle([]byte("брат")))
    }
    
    Output:
    
    LOUD NOISES
    БРАТ

    func ToTitleSpecial

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

    ToTitleSpecial обрабатывает s как байты в кодировке UTF-8 и возвращает копию со всеми буквами Юникода, отображенными в их заглавный регистр, отдавая приоритет правилам специального регистра.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	str := []byte("ahoj vývojári golang")
    	totitle := bytes.ToTitleSpecial(unicode.AzeriCase, str)
    	fmt.Println("Original : " + string(str))
    	fmt.Println("ToTitle : " + string(totitle))
    }
    Output:
    
    Original : ahoj vývojári golang
    ToTitle : AHOJ VÝVOJÁRİ GOLANG

    func ToUpper

     func ToUpper(s []byte) []byte
    

    ToUpper возвращает копию байтового фрагмента s со всеми буквами Юникода, переведенными в верхний регистр.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%s", bytes.ToUpper([]byte("Gopher")))
    }
    Output:
    
    GOPHER

    func ToUpperSpecial

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

    ToUpperSpecial обрабатывает s как байт в кодировке UTF-8 и возвращает копию со всеми буквами Юникода, переведенными в верхний регистр, отдавая приоритет правилам специального регистра.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	str := []byte("ahoj vývojári golang")
    	totitle := bytes.ToUpperSpecial(unicode.AzeriCase, str)
    	fmt.Println("Original : " + string(str))
    	fmt.Println("ToUpper : " + string(totitle))
    }
    
    Output:
    
    Original : ahoj vývojári golang
    ToUpper : AHOJ VÝVOJÁRİ GOLANG

    func ToValidUTF8

     func ToValidUTF8(s, replacement []byte) []byte
    

    ToValidUTF8 обрабатывает s как байты в кодировке UTF-8 и возвращает копию, в которой каждый ряд байтов, представляющих недопустимый UTF-8, заменен байтами в replacement, которая может быть пустой.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("%s\n", bytes.ToValidUTF8([]byte("abc"), []byte("\uFFFD")))
    	fmt.Printf("%s\n", bytes.ToValidUTF8([]byte("a\xffb\xC0\xAFc\xff"), []byte("")))
    	fmt.Printf("%s\n", bytes.ToValidUTF8([]byte("\xed\xa0\x80"), []byte("abc")))
    }
    Output:
    
    abc
    abc
    abc

    func Trim

     func Trim(s []байт, cutset string) []байт
    

    Trim возвращает подфрагмент s, отсекая все ведущие и последующие кодовые точки в кодировке UTF-8, содержащиеся в cutset.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Printf("[%q]", bytes.Trim([]byte(" !!! Achtung! Achtung! !!! "), "! "))
    }
    Output:
    
    ["Achtung! Achtung"]

    func TrimFunc

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

    TrimFunc возвращает подфрагмент s, отсекая все ведущие и последующие точки кода c в кодировке UTF-8, которые удовлетворяют f(c).

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	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

     func TrimLeft(s []байт, cutset string) []байт
    

    TrimLeft возвращает подфрагмент s, отсекая все ведущие точки кода в кодировке UTF-8, содержащиеся в cutset.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Print(string(bytes.TrimLeft([]byte("453gopher8257"), "0123456789")))
    }
    
    Output:
    
    gopher8257

    func TrimLeftFunc

     func TrimLeftFunc(s []байт, f func(r rune) bool) []байт
    

    TrimLeftFunc рассматривает s как байт в кодировке UTF-8 и возвращает подфрагмент s, отрезая все ведущие кодовые точки c в кодировке UTF-8, которые удовлетворяют f(c).

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	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 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)
    }
    Output:
    
    Hello, world!

    func TrimRight

     func TrimRight(s []байт, cutset string) []байт
    

    TrimRight возвращает подфрагмент s, отрезая все кодовые точки в кодировке UTF-8, которые содержатся в cutset.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Print(string(bytes.TrimRight([]byte("453gopher8257"), "0123456789")))
    }
    
    Output:
    
    453gopher

    func TrimRightFunc

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

    TrimRightFunc возвращает подфрагмент s, отсекая все кодовые точки c, которые удовлетворяют f(c).

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"unicode"
    )
    
    func main() {
    	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 TrimSpace

     func TrimSpace(s []byte) []byte
    

    TrimSpace возвращает подфрагмент s, отсекая все ведущие и последующие белые пробелы, как определено Unicode.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	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) []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)
    }
    
    Output:
    
    Hello, world!

    Типы

    type Buffer

    type Buffer struct {
    	// содержит отфильтрованные или неэкспонированные поля
    }
    

    Буфер - это буфер переменного размера из байтов с методами Buffer.Read и Buffer.Write. Нулевое значение для Buffer - это пустой буфер, готовый к использованию.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    	"os"
    )
    
    func main() {
    	var b bytes.Buffer // A Buffer needs no initialization.
    	b.Write([]byte("Hello "))
    	fmt.Fprintf(&b, "world!")
    	b.WriteTo(os.Stdout)
    }
    
    Output:
    
    Hello world!
    Пример Reader
    package main
    
    import (
    	"bytes"
    	"encoding/base64"
    	"io"
    	"os"
    )
    
    func main() {
    	// 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 в качестве его начального содержимого. Новый буфер получает право собственности на buf, и вызывающая сторона не должна использовать buf после этого вызова. NewBuffer предназначен для подготовки буфера к чтению существующих данных. Он также может быть использован для установки начального размера внутреннего буфера для записи. Для этого buf должен иметь желаемый объем, но длину, равную нулю.

    В большинстве случаев для инициализации буфера достаточно использовать new(Buffer) (или просто объявить переменную Buffer).

    func NewBufferString

     func NewBufferString(s string) *Buffer
    

    NewBufferString создает и инициализирует новый буфер, используя строку s в качестве его начального содержимого. Он предназначен для подготовки буфера к чтению существующей строки.

    В большинстве случаев для инициализации буфера достаточно использовать new(Buffer) (или просто объявить переменную Buffer).

    func (*Buffer) Available

     func (b *Buffer) Available() int
    

    Available возвращает количество неиспользованных байт в буфере.

    func (*Buffer) AvailableBuffer

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

    AvailableBuffer возвращает пустой буфер с емкостью b.Available(). Этот буфер предназначен для

    Пример
    package main
    
    import (
    	"bytes"
    	"os"
    	"strconv"
    )
    
    func main() {
    	var buf bytes.Buffer
    	for i := 0; i < 4; i++ {
    		b := buf.AvailableBuffer()
    		b = strconv.AppendInt(b, int64(i), 10)
    		b = append(b, ' ')
    		buf.Write(b)
    	}
    	os.Stdout.Write(buf.Bytes())
    }
    
    Output:
    
    0 1 2 3

    func (*Buffer) Bytes

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

    Bytes возвращает фрагмент длины b.Len(), содержащий непрочитанную часть буфера. Этот фрагмент действителен для использования только до следующего изменения буфера (то есть только до следующего вызова метода типа Buffer.Read, Buffer.Write, Buffer.Reset или Buffer.Truncate). Слайс псевдоним содержимого буфера, по крайней мере, до следующей модификации буфера, поэтому немедленные изменения в слайсе повлияют на результат последующих чтений.

    Пример
    package main
    
    import (
    	"bytes"
    	"os"
    )
    
    func main() {
    	buf := bytes.Buffer{}
    	buf.Write([]byte{'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'})
    	os.Stdout.Write(buf.Bytes())
    }
    
    Output:
    
    hello world

    func (*Buffer) Cap

     func (b *Buffer) Cap() int
    

    Cap возвращает емкость базового байтового среза буфера, то есть общее пространство, выделенное для данных буфера.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	buf1 := bytes.NewBuffer(make([]byte, 10))
    	buf2 := bytes.NewBuffer(make([]byte, 0, 10))
    	fmt.Println(buf1.Cap())
    	fmt.Println(buf2.Cap())
    }
    Output:
    
    10
    10

    func (*Buffer) Grow

     func (b *Buffer) Grow(n int)
    

    Grow увеличивает емкость буфера, если необходимо, чтобы гарантировать место для еще 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()])
    }
    
    Output:
    
    "64 bytes or fewer"

    func (*Buffer) Len

     func (b *Buffer) Len() int
    

    Len возвращает количество байт непрочитанной части буфера; b.Len() == len(b.Bytes()).

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var b bytes.Buffer
    	b.Grow(64)
    	b.Write([]byte("abcde"))
    	fmt.Printf("%d", b.Len())
    }
    Output:
    
    5

    func (*Buffer) Next

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

    Next возвращает фрагмент, содержащий следующие n байт из буфера, продвигая буфер так, как если бы байты были возвращены функцией Buffer.Read. Если в буфере меньше n байт, Next возвращает весь буфер. Фрагмент действителен только до следующего вызова метода чтения или записи.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var b bytes.Buffer
    	b.Grow(64)
    	b.Write([]byte("abcde"))
    	fmt.Printf("%s\n", b.Next(2))
    	fmt.Printf("%s\n", b.Next(2))
    	fmt.Printf("%s", b.Next(2))
    }
    
    Output:
    
    ab
    cd
    e

    func (*Buffer) Read

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

    Read считывает следующие len(p) байт из буфера или пока буфер не будет исчерпан. Возвращаемое значение n - количество прочитанных байт. Если в буфере нет данных для возврата, err будет io.EOF (если только len(p) не равно нулю); в противном случае это будет nil.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var b bytes.Buffer
    	b.Grow(64)
    	b.Write([]byte("abcde"))
    	rdbuf := make([]byte, 1)
    	n, err := b.Read(rdbuf)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(n)
    	fmt.Println(b.String())
    	fmt.Println(string(rdbuf))
    }
    Output:
    
    1
    bcde
    a

    func (*Buffer) ReadByte

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

    ReadByte считывает и возвращает следующий байт из буфера. Если ни один байт не доступен, возвращается ошибка io.EOF.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var b bytes.Buffer
    	b.Grow(64)
    	b.Write([]byte("abcde"))
    	c, err := b.ReadByte()
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(c)
    	fmt.Println(b.String())
    }
    
    Output:
    
    97
    bcde

    func (*Buffer) ReadBytes

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

    ReadBytes читает до первого появления delim во входных данных, возвращая фрагмент, содержащий данные до разделителя включительно. Если ReadBytes встречает ошибку до нахождения разделителя, он возвращает данные, прочитанные до ошибки, и саму ошибку (часто io.EOF). ReadBytes возвращает err != nil тогда и только тогда, когда возвращаемые данные не заканчиваются на delim.

    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 из буфера. Если байтов нет, возвращается ошибка 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) Сброс()
    

    Сброс приводит к тому, что буфер становится пустым, но сохраняет базовое хранилище для использования в будущих записях. Сброс - это то же самое, что и Buffer.Truncate(0).

    func (*Buffer) String

     func (b *Buffer) String() string
    

    String возвращает содержимое непрочитанной части буфера в виде строки. Если буфер является нулевым указателем, возвращается «».

    Для более эффективного создания строк см. тип strings.Builder.

    func (*Buffer) Truncate

     func (b *Buffer) Truncate(n int)
    

    Truncate удаляет из буфера все непрочитанные байты, кроме первых n, но продолжает использовать выделенную память. Если n отрицательно или больше длины буфера, происходит паника.

    func (*Buffer) UnreadByte

     func (b *Buffer) UnreadByte() error
    

    UnreadByte считывает последний байт, возвращенный последней успешной операцией чтения, которая прочитала хотя бы один байт. Если с момента последнего чтения произошла запись, если последнее чтение вернуло ошибку или если при чтении было прочитано ноль байт, UnreadByte возвращает ошибку.

    func (*Buffer) UnreadRune

     func (b *Buffer) UnreadRune() error
    

    UnreadRune считывает последнюю руну, возвращенную Buffer.ReadRune. Если последняя операция чтения или записи в буфер не была успешной Buffer.ReadRune, UnreadRune возвращает ошибку. (В этом отношении она строже, чем Buffer.UnreadByte, которая отменяет чтение последнего байта из любой операции чтения).

    func (*Buffer) Write

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

    Write добавляет содержимое p в буфер, увеличивая буфер по мере необходимости. Возвращаемое значение n - длина p; err всегда равно nil. Если буфер становится слишком большим, Write паникует с сообщением ErrTooLarge.

    func (*Buffer) WriteByte

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

    WriteByte добавляет байт c в буфер, увеличивая буфер по мере необходимости. Возвращаемая ошибка всегда равна nil, но она включается, чтобы соответствовать WriteByte от bufio.Writer. Если буфер становится слишком большим, WriteByte паникует с сообщением ErrTooLarge.

    func (*Buffer) WriteRune

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

    WriteRune добавляет кодировку UTF-8 кодовой точки Юникода r к буферу, возвращая его длину и ошибку, которая всегда равна nil, но включается для соответствия WriteRune от bufio.Writer. Буфер увеличивается по мере необходимости; если он становится слишком большим, WriteRune паникует с сообщением ErrTooLarge.

    func (*Buffer) WriteString

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

    WriteString добавляет содержимое s в буфер, увеличивая буфер по мере необходимости. Возвращаемое значение n - длина s; err всегда равно nil. Если буфер становится слишком большим, WriteString паникует с сообщением ErrTooLarge.

    func (*Buffer) WriteTo

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

    WriteTo записывает данные в w до тех пор, пока буфер не будет исчерпан или не произойдет ошибка. Возвращаемое значение n - это количество записанных байт; оно всегда помещается в int, но для соответствия интерфейсу io.WriterTo оно равно int64. Также возвращается любая ошибка, возникшая во время записи.

    type Reader

    type Reader struct {
    	// содержит отфильтрованные или неотфильтрованные поля
    }
    

    Reader реализует интерфейсы io.Reader, io.ReaderAt, io.WriterTo, io.Seeker, io.ByteScanner и io.RuneScanner, читая из байтового фрагмента. В отличие от буфера, Reader доступен только для чтения и поддерживает поиск. Нулевое значение для Reader работает как Reader пустого фрагмента.

    func NewReader

     func NewReader(b []byte) *Reader
    

    NewReader возвращает новый Reader, читающий из b.

    func (*Reader) Len

     func (r *Reader) Len() int
    

    Len возвращает количество байт непрочитанной части фрагмента.

    Пример
    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	fmt.Println(bytes.NewReader([]byte("Hi!")).Len())
    	fmt.Println(bytes.NewReader([]byte("こんにちは!")).Len())
    }
    Output:
    
    3
    16

    func (*Reader) Read

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

    Read реализует интерфейс io.Reader.

    func (*Reader) ReadAt

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

    ReadAt реализует интерфейс io.ReaderAt.

    func (*Reader) ReadByte

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

    ReadByte реализует интерфейс io.ByteReader.

    func (*Reader) ReadRune

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

    ReadRune реализует интерфейс io.RuneReader.

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

    Сброс переводит ридер в режим чтения из 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 возвращает исходную длину базового байтового фрагмента. Size - это количество байт, доступных для чтения через Reader.ReadAt. На результат не влияют никакие вызовы методов, кроме Reader.Reset.

    func (*Reader) UnreadByte

     func (r *Reader) UnreadByte() error
    

    UnreadByte дополняет Reader.ReadByte в реализации интерфейса io.ByteScanner.

    func (*Reader) UnreadRune

     func (r *Reader) UnreadRune() error
    

    UnreadRune дополняет Reader.ReadRune в реализации интерфейса io.RuneScanner.

    func (*Reader) WriteTo

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

    WriteTo реализует интерфейс io.WriterTo.