Spec-Zone.ru › Go

Пакет bytes

  • import "bytes"
  • Обзор
  • Индекс
  • Примеры

Обзор

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

Индекс

  • Константы
  • Переменные
  • func Clone(b []byte) []byte
  • func Compare(a, b []byte) int
  • func Contains(b, subslice []byte) bool
  • func ContainsAny(b []byte, chars string) bool
  • func ContainsFunc(b []byte, f func(rune) bool) bool
  • func ContainsRune(b []byte, r rune) bool
  • func Count(s, sep []byte) int
  • func Cut(s, sep []byte) (before, after []byte, found bool)
  • func CutPrefix(s, prefix []byte) (after []byte, found bool)
  • func CutSuffix(s, suffix []byte) (before []byte, found bool)
  • 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 FieldsFuncSeq(s []byte, f func(rune) bool) iter.Seq[[]byte]
  • func FieldsSeq(s []byte) iter.Seq[[]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(b []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 Lines(s []byte) iter.Seq[[]byte]
  • 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 ReplaceAll(s, old, new []byte) []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 SplitAfterSeq(s, sep []byte) iter.Seq[[]byte]
  • func SplitN(s, sep []byte, n int) [][]byte
  • func SplitSeq(s, sep []byte) iter.Seq[[]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 ToValidUTF8(s, replacement []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
  • тип Buffer
  • func NewBuffer(buf []byte) *Buffer
  • func NewBufferString(s string) *Buffer
  • func (b *Buffer) Available() int
  • func (b *Buffer) AvailableBuffer() []byte
  • 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)
  • тип 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)
END_OF_DOCUMENT_MARKER

Примеры

Буфер
Буфер.ДоступныйБуфер
Буфер.Байты
Буфер.Ёмкость
Буфер.Увеличение
Буфер.Длина
Буфер.Следующий
Буфер.Чтение
Буфер.ЧтениеБайта
Буфер (Чтец)
Копия
Сравнение
Сравнение (Поиск)
Содержит
СодержитЛюбой
СодержитФункцию
СодержитСимвол
Подсчёт
Разрезать
УдалитьПрефикс
УдалитьСуффикс
Равны
Равны(Регистронезависимо)
Поля
ПоляФункции
НачинаетсяС
ЗаканчиваетсяНа
Индекс
ИндексЛюбого
ИндексБайта
ИндексФункции
ИндексСимвола
Объединить
ПоследнийИндекс
ПоследнийИндексЛюбого
ПоследнийИндексБайта
ПоследнийИндексФункции
Преобразовать
Чтец.Длина
Повторить
Заменить
ЗаменитьВсе
Символы
Разделить
РазделитьПосле
РазделитьПослеN
РазделитьN
ЗаглавныеБуквы
КНижнИмРегистру
КНижнИмРегиструСпец
КЗаглавнЫмБуквам
КЗаглавнЫмБуквамСпец
КВерхнИмРегистру
КВерхнИмРегиструСпец
КВалиднЫмUTF8
Обрезать
ОбрезатьФункцией
ОбрезатьСлева
ОбрезатьСлеваФункцией
УдалитьПрефикс
ОбрезатьСправа
ОбрезатьСправаФункцией
ОбрезатьПробелы
УдалитьСуффикс

Файлы пакета

buffer.go bytes.go iter.go reader.go

Константы

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

const MinRead = 512

Переменные

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

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

функция Clone 1.20

func Clone(b []byte) []byte

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

Пример

Код:

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)

Вывод:

abc
abc
dbc

функция Compare

func Compare(a, b []byte) int

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

Пример

Код:

// 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
}

Пример (Поиск)

Код:

// 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!
}

функция Contains

func Contains(b, subslice []byte) bool

Contains сообщает, содержится ли подсрезка в b.

Пример

Код:

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("")))

Вывод:

true
false
true
true

функция ContainsAny 1.7

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

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

Пример

Код:

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(""), ""))

Вывод:

true
true
false
false

функция ContainsFunc 1.21

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

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

Пример

Код:

f := func(r rune) bool {
    return r >= 'a' && r <= 'z'
}
fmt.Println(bytes.ContainsFunc([]byte("HELLO"), f))
fmt.Println(bytes.ContainsFunc([]byte("World"), f))

Вывод:

false
true

функция ContainsRune 1.7

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

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

Пример

Код:

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(""), '@'))

Вывод:

true
false
true
true
false

функция Count

func Count(s, sep []byte) int

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

Пример

Код:

fmt.Println(bytes.Count([]byte("cheese"), []byte("e")))
fmt.Println(bytes.Count([]byte("five"), []byte(""))) // before & after each rune

Вывод:

3
5

функция Cut 1.18

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, а не копии.

Пример

Код:

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")

Вывод:

Cut("Gopher", "Go") = "", "pher", true
Cut("Gopher", "ph") = "Go", "er", true
Cut("Gopher", "er") = "Goph", "", true
Cut("Gopher", "Badger") = "Gopher", "", false

функция CutPrefix 1.20

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

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

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

Пример

Код:

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")

Вывод:

CutPrefix("Gopher", "Go") = "pher", true
CutPrefix("Gopher", "ph") = "Gopher", false

функция CutSuffix 1.20

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

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

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

Пример

Код:

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")

Вывод:

CutSuffix("Gopher", "Go") = "Gopher", false
CutSuffix("Gopher", "er") = "Goph", true

функция Equal

func Equal(a, b []byte) bool

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

Пример

Код:

fmt.Println(bytes.Equal([]byte("Go"), []byte("Go")))
fmt.Println(bytes.Equal([]byte("Go"), []byte("C++")))

Вывод:

true
false

функция EqualFold

func EqualFold(s, t []byte) bool

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

Пример

Код:

fmt.Println(bytes.EqualFold([]byte("Go"), []byte("go")))

Вывод:

true

функция Fields

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

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

Пример

Код:

fmt.Printf("Fields are: %q", bytes.Fields([]byte("  foo bar  baz   ")))

Вывод:

Fields are: ["foo" "bar" "baz"]

функция 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.

Пример

Код:

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

Вывод:

Fields are: ["foo1" "bar2" "baz3"]

функция FieldsFuncSeq 1.24

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

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

func FieldsSeq 1.24

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

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

func HasPrefix

func HasPrefix(s, prefix []byte) bool

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

Пример

Код:

fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("Go")))
fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("C")))
fmt.Println(bytes.HasPrefix([]byte("Gopher"), []byte("")))

Вывод:

true
false
true

func HasSuffix

func HasSuffix(s, suffix []byte) bool

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

Пример

Код:

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("")))

Вывод:

true
false
false
true

func Index

func Index(s, sep []byte) int

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

Пример

Код:

fmt.Println(bytes.Index([]byte("chicken"), []byte("ken")))
fmt.Println(bytes.Index([]byte("chicken"), []byte("dmr")))

Вывод:

4
-1

func IndexAny

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

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

Пример

Код:

fmt.Println(bytes.IndexAny([]byte("chicken"), "aeiouy"))
fmt.Println(bytes.IndexAny([]byte("crwth"), "aeiouy"))

Вывод:

2
-1

func IndexByte

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

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

Пример

Код:

fmt.Println(bytes.IndexByte([]byte("chicken"), byte('k')))
fmt.Println(bytes.IndexByte([]byte("chicken"), byte('g')))

Вывод:

4
-1

func IndexFunc

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

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))

Вывод:

7
-1

func IndexRune

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

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

Пример

Код:

fmt.Println(bytes.IndexRune([]byte("chicken"), 'k'))
fmt.Println(bytes.IndexRune([]byte("chicken"), 'd'))

Вывод:

4
-1

func Join

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

Join конкатенирует элементы s, создавая новый срез байтов. Разделитель sep размещается между элементами в результирующем срезе.

Пример

Код:

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

Вывод:

foo, bar, baz

func LastIndex

func LastIndex(s, sep []byte) int

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

Пример

Код:

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")))

Вывод:

0
3
-1

func LastIndexAny

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

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

Пример

Код:

fmt.Println(bytes.LastIndexAny([]byte("go gopher"), "MüQp"))
fmt.Println(bytes.LastIndexAny([]byte("go 地鼠"), "地大"))
fmt.Println(bytes.LastIndexAny([]byte("go gopher"), "z,!."))

Вывод:

5
3
-1

func LastIndexByte 1.5

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

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

Пример

Код:

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')))

Вывод:

3
8
-1

func LastIndexFunc

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

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

Вывод:

8
9
-1

func Lines 1.24

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 со всеми символами, измененными в соответствии с функцией отображения. Если mapping возвращает отрицательное значение, символ удаляется из среза байтов без замены. Символы в 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\n", bytes.Map(rot13, []byte("'Twas brillig and the slithy gopher...")))

Вывод:

'Gjnf oevyyvt naq gur fyvgul tbcure...

func Repeat

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

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

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

Пример

Код:

fmt.Printf("ba%s", bytes.Repeat([]byte("na"), 2))

Вывод:

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, нет ограничений на количество замен.

Пример

Код:

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))

Вывод:

oinky oinky oink
moo moo moo

func ReplaceAll 1.12

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

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

Пример

Код:

fmt.Printf("%s\n", bytes.ReplaceAll([]byte("oink oink oink"), []byte("oink"), []byte("moo")))

Вывод:

moo moo moo

func Runes

func Runes(s []byte) []rune

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

Пример

Код:

rs := bytes.Runes([]byte("go gopher"))
for _, r := range rs {
    fmt.Printf("%#U\n", r)
}

Вывод:

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 с count = -1.

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

Пример

Код:

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")))

Вывод:

["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 с count = -1.

Пример

Код:

fmt.Printf("%q\n", bytes.SplitAfter([]byte("a,b,c"), []byte(",")))

Вывод:

["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: все подстроки.

Пример

Код:

fmt.Printf("%q\n", bytes.SplitAfterN([]byte("a,b,c"), []byte(","), 2))

Вывод:

["a," "b,c"]

func SplitAfterSeq 1.24

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

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

func SplitN

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

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

  • n > 0: не более n подстрок; последняя подстрока будет оставшейся частью;
  • n == 0: результат nil (ноль подстрок);
  • n < 0: все подстроки.

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

Пример

Код:

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)

Вывод:

["a" "b,c"]
[] (nil = true)

func SplitSeq 1.24

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

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

func Title

func Title(s []byte) []byte

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

Устарело: Правило Title, используемое для границ слов, не обрабатывает Unicode пунктуацию должным образом. Используйте golang.org/x/text/cases вместо этого.

Пример

Код:

fmt.Printf("%s", bytes.Title([]byte("her royal highness")))

Вывод:

Her Royal Highness

func ToLower

func ToLower(s []byte) []byte

ToLower возвращает копию среза байтов s с отображением всех Unicode букв в их строчные буквы.

Пример

Код:

fmt.Printf("%s", bytes.ToLower([]byte("Gopher")))

Вывод:

gopher

func ToLowerSpecial

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

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

Пример

Код:

str := []byte("AHOJ VÝVOJÁRİ GOLANG")
totitle := bytes.ToLowerSpecial(unicode.AzeriCase, str)
fmt.Println("Original : " + string(str))
fmt.Println("ToLower : " + string(totitle))

Вывод:

Original : AHOJ VÝVOJÁRİ GOLANG
ToLower : ahoj vývojári golang

func ToTitle

func ToTitle(s []byte) []byte

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

Пример

Код:

fmt.Printf("%s\n", bytes.ToTitle([]byte("loud noises")))
fmt.Printf("%s\n", bytes.ToTitle([]byte("брат")))

Вывод:

LOUD NOISES
БРАТ

func ToTitleSpecial

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

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

Пример

Код:

str := []byte("ahoj vývojári golang")
totitle := bytes.ToTitleSpecial(unicode.AzeriCase, str)
fmt.Println("Original : " + string(str))
fmt.Println("ToTitle : " + string(totitle))

Вывод:

Original : ahoj vývojári golang
ToTitle : AHOJ VÝVOJÁRİ GOLANG

func ToUpper

func ToUpper(s []byte) []byte

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

Пример

Код:

fmt.Printf("%s", bytes.ToUpper([]byte("Gopher")))

Вывод:

GOPHER

func ToUpperSpecial

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

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

Пример

Код:

str := []byte("ahoj vývojári golang")
totitle := bytes.ToUpperSpecial(unicode.AzeriCase, str)
fmt.Println("Original : " + string(str))
fmt.Println("ToUpper : " + string(totitle))

Вывод:

Original : ahoj vývojári golang
ToUpper : AHOJ VÝVOJÁRİ GOLANG

func ToValidUTF8 1.13

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

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

Пример

Код:

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")))

Вывод:

abc
abc
abc

func Trim

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

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

Пример

Код:

fmt.Printf("[%q]", bytes.Trim([]byte(" !!! Achtung! Achtung! !!! "), "! "))

Вывод:

["Achtung! Achtung"]

func TrimFunc

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

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

Пример

Код:

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)))

Вывод:

-gopher!
"go-gopher!"
go-gopher
go-gopher!

func TrimLeft

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

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

Пример

Код:

fmt.Print(string(bytes.TrimLeft([]byte("453gopher8257"), "0123456789")))

Вывод:

gopher8257

func TrimLeftFunc

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

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

Пример

Код:

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)))

Вывод:

-gopher
go-gopher!
go-gopher!567

func TrimPrefix 1.1

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

TrimPrefix возвращает s без указанного ведущего префикса. Если s не начинается с префикса, s возвращается без изменений.

Пример

Код:

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

Вывод:

Hello, world!

func TrimRight

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

TrimRight возвращает подсрез s, удаляя все хвостовые точки кода UTF-8, содержащиеся в cutset.

Пример

Код:

fmt.Print(string(bytes.TrimRight([]byte("453gopher8257"), "0123456789")))

Вывод:

453gopher

func TrimRightFunc

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

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

Пример

Код:

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)))

Вывод:

go-
go-gopher
1234go-gopher!

func TrimSpace

func TrimSpace(s []byte) []byte

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

Пример

Код:

fmt.Printf("%s", bytes.TrimSpace([]byte(" \t\n a lone gopher \n\t\r\n")))

Вывод:

a lone gopher

func TrimSuffix 1.1

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

TrimSuffix возвращает s без указанного хвостового суффикса. Если s не заканчивается на суффикс, 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)

Вывод:

Hello, world!

тип Buffer

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

type Buffer struct {
    // contains filtered or unexported fields
}

Пример

Код:

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

Вывод:

Hello world!

Пример (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)

Вывод:

Gophers rule!

func NewBuffer

func NewBuffer(buf []byte) *Buffer

NewBuffer создаёт и инициализирует новый Buffer, используя buf в качестве начального содержимого. Новый Buffer принимает владение buf, и вызывающая сторона не должна использовать buf после этого вызова. NewBuffer предназначен для подготовки Buffer для чтения существующих данных. Он также может быть использован для установки начального размера внутреннего буфера для записи. Для этого buf должен иметь желаемую ёмкость, но длина должна быть равна нулю.

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

func NewBufferString

func NewBufferString(s string) *Buffer

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

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

func (*Buffer) Available 1.21

func (b *Buffer) Available() int

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

func (*Buffer) AvailableBuffer 1.21

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

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

Пример

Код:

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())

Вывод:

0 1 2 3

func (*Buffer) Bytes

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

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

Пример

Код:

buf := bytes.Buffer{}
buf.Write([]byte{'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'})
os.Stdout.Write(buf.Bytes())

Вывод:

hello world

func (*Buffer) Cap 1.5

func (b *Buffer) Cap() int

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

Пример

Код:

buf1 := bytes.NewBuffer(make([]byte, 10))
buf2 := bytes.NewBuffer(make([]byte, 0, 10))
fmt.Println(buf1.Cap())
fmt.Println(buf2.Cap())

Вывод:

10
10

func (*Buffer) Grow 1.1

func (b *Buffer) Grow(n int)

Grow увеличивает ёмкость буфера, если необходимо, чтобы гарантировать пространство для ещё n байтов. После Grow(n), как минимум n байтов могут быть записаны в буфер без дополнительного выделения. Если n отрицательное, Grow вызовет панику. Если буфер не может быть увеличен, он вызовет панику с ошибкой ErrTooLarge.

Пример

Код:

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

Вывод:

"64 bytes or fewer"

func (*Buffer) Len

func (b *Buffer) Len() int

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

Пример

Код:

var b bytes.Buffer
b.Grow(64)
b.Write([]byte("abcde"))
fmt.Printf("%d", b.Len())

Вывод:

5

func (*Buffer) Next

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

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

Пример

Код:

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))

Вывод:

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.

Пример

Код:

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))

Вывод:

1
bcde
a

func (*Buffer) ReadByte

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

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

Пример

Код:

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())

Вывод:

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 считывает и возвращает следующий Unicode-символ, закодированный в 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 только тогда, когда возвращаемые данные не заканчиваются на delim.

func (*Buffer) Reset

func (b *Buffer) Reset()

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

func (*Buffer) String

func (b *Buffer) String() string

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

Для более эффективного построения строк используйте тип 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, но включена для соответствия bufio.Writer's WriteByte. Если буфер становится слишком большим, WriteByte вызовет панику с ErrTooLarge.

func (*Buffer) WriteRune

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

WriteRune добавляет UTF-8 кодирование Unicode символа r в буфер, возвращая его длину и ошибку, которая всегда равна nil, но включена для соответствия bufio.Writer's WriteRune. Буфер увеличивается по мере необходимости; если он становится слишком большим, 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, но это int64 для соответствия интерфейсу io.WriterTo. Любая ошибка, возникшая во время записи, также возвращается.

type Reader

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

type Reader struct {
    // contains filtered or unexported fields
}

func NewReader

func NewReader(b []byte) *Reader

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

func (*Reader) Len

func (r *Reader) Len() int

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

Пример

Код:

fmt.Println(bytes.NewReader([]byte("Hi!")).Len())
fmt.Println(bytes.NewReader([]byte("こんにちは!")).Len())

Вывод:

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 1.7

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 1.5

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 1.1

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

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

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/bytes/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API