...

パッケージ bytes

import "bytes"
概要
目次

概要 ▾

bytes パッケージは,バイトスライスを操作する関数を実装します。 これは strings パッケージの機能に似ています。

目次 ▾

定数
変数
func Compare(a, b []byte) int
func Contains(b, subslice []byte) bool
func ContainsAny(b []byte, chars string) bool
func ContainsRune(b []byte, r rune) bool
func Count(s, sep []byte) int
func Equal(a, b []byte) bool
func EqualFold(s, t []byte) bool
func Fields(s []byte) [][]byte
func FieldsFunc(s []byte, f func(rune) bool) [][]byte
func HasPrefix(s, prefix []byte) bool
func HasSuffix(s, suffix []byte) bool
func Index(s, sep []byte) int
func IndexAny(s []byte, chars string) int
func IndexByte(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 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 SplitN(s, sep []byte, n int) [][]byte
func Title(s []byte) []byte
func ToLower(s []byte) []byte
func ToLowerSpecial(c unicode.SpecialCase, s []byte) []byte
func ToTitle(s []byte) []byte
func ToTitleSpecial(c unicode.SpecialCase, s []byte) []byte
func ToUpper(s []byte) []byte
func ToUpperSpecial(c unicode.SpecialCase, s []byte) []byte
func 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
type Buffer
    func NewBuffer(buf []byte) *Buffer
    func NewBufferString(s string) *Buffer
    func (b *Buffer) Bytes() []byte
    func (b *Buffer) Cap() int
    func (b *Buffer) Grow(n int)
    func (b *Buffer) Len() int
    func (b *Buffer) Next(n int) []byte
    func (b *Buffer) Read(p []byte) (n int, err error)
    func (b *Buffer) ReadByte() (byte, error)
    func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
    func (b *Buffer) ReadFrom(r io.Reader) (n int64, err error)
    func (b *Buffer) ReadRune() (r rune, size int, err error)
    func (b *Buffer) ReadString(delim byte) (line string, err error)
    func (b *Buffer) Reset()
    func (b *Buffer) String() string
    func (b *Buffer) Truncate(n int)
    func (b *Buffer) UnreadByte() error
    func (b *Buffer) UnreadRune() error
    func (b *Buffer) Write(p []byte) (n int, err error)
    func (b *Buffer) WriteByte(c byte) error
    func (b *Buffer) WriteRune(r rune) (n int, err error)
    func (b *Buffer) WriteString(s string) (n int, err error)
    func (b *Buffer) WriteTo(w io.Writer) (n int64, err error)
type Reader
    func NewReader(b []byte) *Reader
    func (r *Reader) Len() int
    func (r *Reader) Read(b []byte) (n int, err error)
    func (r *Reader) ReadAt(b []byte, off int64) (n int, err error)
    func (r *Reader) ReadByte() (byte, error)
    func (r *Reader) ReadRune() (ch rune, size int, err error)
    func (r *Reader) Reset(b []byte)
    func (r *Reader) Seek(offset int64, whence int) (int64, error)
    func (r *Reader) Size() int64
    func (r *Reader) UnreadByte() error
    func (r *Reader) UnreadRune() error
    func (r *Reader) WriteTo(w io.Writer) (n int64, err error)
Bugs

パッケージファイル

buffer.go bytes.go reader.go

定数

MinRead は, Buffer.ReadFrom によって Read 呼び出しに渡される最小スライスサイズです。 Buffer が r の内容を保持するのに必要な量を超えており,少なくとも MinRead バイトを持っている限り, ReadFrom は内部のバッファを大きくしません。

const MinRead = 512

変数

ErrTooLarge は,バッファにデータを格納するためにメモリを割り当てることができない場合に panic に渡されます。

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

func Compare

func Compare(a, b []byte) int

Compare は, 2 つのバイトスライスを辞書式に比較して整数を返します。 a==b の場合は 0, a < b の場合は -1, a > b の場合は +1 となります。 nil 引数は空のスライスと同じです。

コード:

// 0 と比較して Compare の結果を解釈します。
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 と b は等しい
}
if !bytes.Equal(a, b) {
    // a と b は等しくない
}

func Contains

func Contains(b, subslice []byte) bool

Contains は,subslice が 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

func ContainsAny 1.7

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

ContainsAny は,chars 内の UTF-8 エンコードコードポイントのいずれかが b 内にあるかどうかを報告します。

コード:

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

func ContainsRune 1.7

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

ContainsRune は,ルーン文字が UTF-8 エンコードのバイトスライス 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

func Count

func Count(s, sep []byte) int

Count は, s 内の sep の重複しない出現回数を返します。 sep が空のスライスの場合, Count は 1 + s 中の UTF-8 でエンコードされたコードポイントの数を返します。

コード:

fmt.Println(bytes.Count([]byte("cheese"), []byte("e")))
fmt.Println(bytes.Count([]byte("five"), []byte(""))) // 各ルーンの前後

出力:

3
5

func Equal

func Equal(a, b []byte) bool

Equal reports whether a and b are the same length and contain the same bytes. A nil argument is equivalent to an empty slice.

コード:

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

出力:

true
false

func EqualFold

func EqualFold(s, t []byte) bool

EqualFold は, UTF-8 文字列として解釈された s と t が Unicode の大文字と小文字の区別なしで等しいかどうかを報告します。

コード:

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

出力:

true

func Fields

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

Fields は s を UTF-8 でエンコードされたコードポイントのシーケンスとして解釈します。 これは, unicode.IsSpace の定義に従って, 1 つ以上の連続した空白文字の各出現箇所の前後でスライス s を分割し, s のサブスライスのスライスを返します。 s に空白のみが含まれる場合は空のスライスを返します。

コード:

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

出力:

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

func FieldsFunc

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

FieldsFunc は s を UTF-8 でエンコードされたコードポイントのシーケンスとして解釈します。 f(c) を満たすコードポイント c が 1 つ以上連続する箇所でスライス s を分割し, s のサブスライスのスライスを返します。 s 内のすべてのコードポイントが f(c) を満たす,または len(s) == 0 の場合,空のスライスが返されます。 FieldsFunc は, f(c) を呼び出す順序については保証しません。 f が与えられた 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))

出力:

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

func HasPrefix

func HasPrefix(s, prefix []byte) 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("")))

出力:

true
false
true

func HasSuffix

func HasSuffix(s, suffix []byte) bool

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

出力:

true
false
false
true

func Index

func Index(s, sep []byte) int

Index は, s 内の sep の最初の出現箇所のインデックスを返します。 sep が s 内に存在しない場合は -1 を返します。

コード:

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 でエンコードされた Unicode コードポイントのシーケンスとして解釈します。 IndexAny は, chars に含まれる Unicode コードポイントのうち,s 中で最初に出現するバイトインデックスを返します。 chars が空の場合,または共通のコードポイントがない場合は -1 を返します。

コード:

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 は, b 内の c の最初の出現インデックスを返します。 c が b 内に存在しない場合は -1 を返します。

コード:

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 でエンコードされたコードポイントのシーケンスとして解釈します。 f(c) を満たす最初の Unicode コードポイントのバイトインデックスを s で返し,そうでない場合は -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 の中で最初に現れるバイトインデックスを返します。 s に rune が存在しない場合は -1 を返します。 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 は,s 中の sep の最後の出現インデックスを返します。 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")))

出力:

0
3
-1

func LastIndexAny

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

LastIndexAny は s を UTF-8 でエンコードされた Unicode コードポイントのシーケンスとして解釈します。 これは, 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,!."))

出力:

5
3
-1

func LastIndexByte 1.5

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

LastIndexByte は, s 内の c の最後の出現インデックスを返します。 c が s 内に存在しない場合は -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')))

出力:

3
8
-1

func LastIndexFunc

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

LastIndexFunc は s を UTF-8 でエンコードされたコードポイントのシーケンスとして解釈します。 f(c) を満たす最後の Unicode コードポイントのバイトインデックスを s で返し,そうでない場合は -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 Map

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

Map は,すべての文字をマッピング関数に従って変更した,バイトスライス s のコピーを返します。 マッピングが負の値を返す場合,文字は置き換えられずにバイトスライスから削除されます。 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...")))

出力:

'Gjnf oevyyvt naq gur fyvgul tbcure...

func Repeat

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

Repeat は, b の count 回のコピーからなる新しいバイトスライスを返します。

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 は,old の最初の n 個の重複しない出現箇所を new に置き換えた,スライス s のコピーを返します。 old が空の場合,スライスの先頭と各 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))

出力:

oinky oinky oink
moo moo moo

func ReplaceAll 1.12

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

ReplaceAll は,重複していない old のすべての出現箇所を new に置き換えたスライス s のコピーを返します。 old が空の場合,スライスの先頭と各 UTF-8 シーケンスの後で一致し, k 個の rune スライスの場合は最大 k+1 個の置換が行われます。

コード:

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 でエンコードされたコードポイントのシーケンスとして解釈します。 s と同等のルーン (Unicode コードポイント) スライス を返します。

コード:

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 シーケンスの後で分割します。 -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")))

出力:

["a" "b" "c"]
["" "man " "plan " "canal panama"]
[" " "x" "y" "z" " "]
[""]

func SplitAfter

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

SplitAfter は, sep の各出現箇所の後に s をすべてのサブスライスにスライスし,それらのサブスライスのスライスを返します。 sep が空の場合, SplitAfter は各 UTF-8 シーケンスの後で分割します。 -1 の個数を渡した SplitAfterN と同等です。

コード:

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 は, sep の各出現箇所の後で s をサブスライスにスライスし, それらのサブスライスのスライスを返します。 sep が空の場合, SplitAfterN は各 UTF-8 シーケンスの後で分割します。 引数 n によって,返されるサブスライスの数が決まります。

n > 0: 最大で n 個のサブスライス。最後のサブスライスは分割されなかった残りの部分になります。
n == 0: 結果は nil (ゼロサブスライス)
n < 0: すべてのサブスライス

コード:

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

出力:

["a," "b,c"]

func SplitN

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

SplitN は, sep を区切りとしてs を サブスライスに分割し, 区切り文字の間のサブスライスのスライスを返します。 sep が空の場合, SplitN は各 UTF-8 シーケンスの後で分割します。 引数 n によって,返されるサブスライスの数が決まります。

n > 0: 最大で n 個のサブスライス。最後のサブスライスは分割されなかった残りの部分になります。
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)

出力:

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

func Title

func Title(s []byte) []byte

Title は s を UTF-8 でエンコードされたバイトとして扱い,単語を開始するすべての Unicode 文字をタイトルケースにマップしたコピーを返します。

BUG(rsc): Title が単語の境界に使用する規則は, Unicode の句読点を正しく処理しません。

コード:

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

出力:

Her Royal Highness

func ToLower

func ToLower(s []byte) []byte

ToLower returns a copy of the byte slice s with all Unicode letters mapped to their lower case.

コード:

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

出力:

gopher

func ToLowerSpecial

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

ToLowerSpecial は s を UTF-8 でエンコードされたバイトとして扱い,すべての Unicode 文字を小文字に変換したコピーを返します。 ただし,特別なケースルールが優先されます。

コード:

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 でエンコードされたバイトとして扱い,すべての Unicode 文字をタイトルケースに変換したコピーを返します。

コード:

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 でエンコードされたバイトとして扱い,すべての Unicode 文字をタイトルケースにマップしたコピーを返します。 ただし,特別なケースルールが優先されます。

コード:

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 returns a copy of the byte slice s with all Unicode letters mapped to their upper case.

コード:

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

出力:

GOPHER

func ToUpperSpecial

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

ToUpperSpecial は s を UTF-8 でエンコードされたバイトとして扱い,すべての Unicode 文字を大文字に変更したコピーを返します。 ただし,特別なケースルールが優先されます。

コード:

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

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

ToValidUTF8 は s をUTF-8でエンコードされたバイトとして扱い,無効な UTF-8 を表すバイトの塊ごとに,(空かもしれない) replacement バイトで置き換えられたコピーを返します。

func Trim

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

Trim は,cutset に含まれる UTF-8 エンコードのコードポイントを先頭と末尾からすべて取り除いた s のサブスライスを返します。

コード:

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

出力:

["Achtung! Achtung"]

func TrimFunc

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

TrimFunc は, f(c) を満たすすべての先頭および末尾の UTF-8 エンコードコードポイント c を取り除いた s のサブスライスを戻します。

コード:

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 は,cutset に含まれる UTF-8 エンコードのコードポイントを先頭からすべて取り除いた s のサブスライスを返します。

コード:

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 でエンコードされたバイトとして扱い, f(c) を満たすすべての先頭の UTF-8 エンコードコードポイント c を取り除いた s のサブスライスを返します。

コード:

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 は,先頭の prefix 文字列なしの s を返します。 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)

出力:

Hello, world!

func TrimRight

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

TrimRight は,cutset に含まれる UTF-8 エンコードのコードポイントを末尾からすべて取り除いた s のサブスライスを返します。

コード:

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

出力:

453gopher

func TrimRightFunc

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

TrimRightFunc は, f(c) を満たすすべての末尾の UTF-8 エンコードコードポイント c を取り除いた s のサブスライスを返します。

コード:

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 は, Unicode で定義されてた空白を先頭と末尾からすべて取り除いた 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 は,末尾の suffix 文字列なしの s を返します。 s が suffxi で終わっていない場合, 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!

type Buffer

Buffer は Read と Write メソッドを持つ可変サイズのバイトバッファです。 Buffer のゼロ値は,使用可能な空のバッファーです。

type Buffer struct {
    // エクスポートされていないフィールドがあります
}

コード:

var b bytes.Buffer // バッファは初期化を必要としません。
b.Write([]byte("Hello "))
fmt.Fprintf(&b, "world!")
b.WriteTo(os.Stdout)

出力:

Hello world!

例 (Reader)

コード:

// Buffer は文字列または []byte を 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) Bytes

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

Bytes は,バッファの未読部分を保持する,長さ b.Len() のスライスを返します。 スライスは,次にバッファが変更されるまで (つまり, Read, Write, Reset, または Truncate などのメソッドが次に呼び出されるまで) 有効です。 スライスは少なくとも次のバッファ変更までバッファの内容のエイリアスとなるので, スライスへの即時の変更は将来の読み込みの結果に影響します。

func (*Buffer) Cap 1.5

func (b *Buffer) Cap() int

Cap は,バッファの内部のバイトスライスの容量,つまりバッファのデータに割り当てられた全体容量を返します。

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 バイトを含むスライスを返し, Read によってバイトが返されたかのようにバッファを進めます。 バッファのバイト数が n バイト未満の場合, Next はバッファ全体を返します。 スライスは,次に読み取りまたは書き込みメソッドを呼び出すまで有効です。

func (*Buffer) Read

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

Read は,バッファから次の len(p) バイトを読み込むか,バッファが空になるまで読み込みます。 戻り値 n は読み取られたバイト数です。 バッファに返すべきデータがない場合, err は io.EOF です (len(p) がゼロでない限り) 。 それ以外の場合は nil です。

func (*Buffer) ReadByte

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

ReadByte はバッファから次のバイトを読み込んで返します。 利用可能なバイトがない場合,エラー io.EOF を返します。

func (*Buffer) ReadBytes

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

ReadBytes は,入力で delim (区切り) が最初に現れるまで読み取り,区切り記号までのデータを含むスライスを返します。 ReadBytes が区切りを見つける前にエラーに遭遇した場合は,エラーの前に読み取られたデータとエラー自体 (通常は io.EOF) を返します。 ReadBytes は,返されたデータが delim で終わっていない場合に限り, err != nil を返します。

func (*Buffer) ReadFrom

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

ReadFrom は, r から EOF までデータを読み取り,それをバッファに追加して,必要に応じてバッファを大きくします。 戻り値 n は読み取られたバイト数です。 読み込み中に発生した io.EOF 以外のエラーも返されます。 バッファが大きくなりすぎると, ReadFrom は ErrTooLarge でパニックします。

func (*Buffer) ReadRune

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

ReadRune は,バッファから次の UTF-8 エンコードされた Unicode コードポイントを読み込んで返します。 利用可能なバイトがない場合,返されるエラーは io.EOF です。 バイトが誤った UTF-8 エンコーディングの場合, 1 バイトを消費し, U+FFFD, 1 を返します。

func (*Buffer) ReadString

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

ReadString は,入力内で最初に delim (区切り) が出現するまで読み取り, 区切りまでのデータを含む文字列を返します。 ReadString が区切りを見つける前にエラーに遭遇した場合, それはエラーの前に読み込まれたデータとそのエラー (多くの場合 io.EOF) を返します。 ReadString は,返されたデータが delim で終わっていない場合に限り, err != nil を返します。

func (*Buffer) Reset

func (b *Buffer) Reset()

Reset (リセット) はバッファを空にリセットしますが, 将来の書き込みで使用するために内部のストレージを保持します。 Reset は 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 は,少なくとも 1 バイトを読み取った,最後の成功した読み取り操作によって返された最後のバイトの読み取りをなかったことにします。 最後の読み取り以降に書き込みが行われた場合,最後の読み取りがエラーを返した場合,または読み取りが 0 バイトを読み取っていた場合は, UnreadByte はエラーを返します。

func (*Buffer) UnreadRune

func (b *Buffer) UnreadRune() error

UnreadRune は, ReadRune によって返された最後のルーンの読み取りをなかったことにします。 バッファに対する最新の読み取りまたは書き込み操作が,成功した ReadRune あるいは UnreadRune 出なかった場合,エラーを返します。 (この点で,どんな読み込み操作であっても最後のバイトを未読にする UnreadByte より厳密です。)

func (*Buffer) Write

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

Write は p の内容をバッファに追加し,必要に応じてバッファを大きくします。 戻り値 n は p の長さです。 err は常に nil です。 バッファが大きくなりすぎると, Write は ErrTooLarge でパニックします。

func (*Buffer) WriteByte

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

WriteByte はバイト c をバッファに追加し,必要に応じてバッファを大きくします。 返されるエラーは常に nil ですが, bufio.Writer の WriteByte に合わせてエラーを返すようにしています。 バッファが大きくなりすぎると, WriteByte は ErrTooLarge でパニックします。

func (*Buffer) WriteRune

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

WriteRune は Unicode コードポイント r の UTF-8 エンコーディングをバッファに追加し,その長さとエラーを返します。 エラーは常に nil ですが, bufio.Writer の 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 は書き込まれたバイト数です。 n は常に int に収まりますが, io.WriterTo インターフェースに一致させるため int64 です。 書き込み中に発生したエラーも返されます。

type Reader

Reader は,バイトスライスから読み取って, io.Reader, io.ReaderAt, io.WriterTo, io.Seeker, io.ByteScanner, および io.RuneScanner の各インターフェースを実装します。 Buffer とは異なり,Reader は読み取り専用で,シークをサポートしています。 Reader のゼロ値は,空のスライスの Reader のように機能します。

type Reader struct {
    // エクスポートされていないフィールドがあります
}

func NewReader

func NewReader(b []byte) *Reader

NewReader は b から読み込む新しい Reader を返します。

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 は, ReadAt を介して読み取ることができるバイト数です。 戻り値は常に同じであり,他のメソッドの呼び出しによる影響を受けません。

func (*Reader) UnreadByte

func (r *Reader) UnreadByte() error

UnreadByte は, io.ByteScanner インターフェースの実装において ReadByte を補完します。

func (*Reader) UnreadRune

func (r *Reader) UnreadRune() error

UnreadRune は,ReadRune を補完して io.RuneScanner インターフェースを実装します。

func (*Reader) WriteTo 1.1

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

WriteTo は io.WriterTo インターフェースを実装します。

Bugs