Golangラーニング-bytesパッケージ
8075 ワード
転送[]byteの関数では、転送されたパラメータは変更されません.戻り値はパラメータのコピーか、パラメータのスライスかのいずれかです.
//変換
//sのすべての文字を大文字(小文字、タイトル)形式に変更して返します.func ToUpper(s []byte) []byte func ToLower(s []byte) []byte func ToTitle(s []byte) []byte
//指定したマッピングテーブルを使用して、sのすべての文字を大文字(小文字、タイトル)フォーマットに変更して返します.func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte func ToTitleSpecial(_case unicode.SpecialCase, s []byte) []byte
//sのすべての単語の先頭文字をTitle形式に変更して返します.//BUG:Unicode句読点で区切られた単語はうまく処理できません.func Title(s []byte) []byte
//比較
//2つの[]byteを比較すると、nilパラメータは空の[]byteに相当します.//ab戻り1 func Compare(a,b[]byte)int
//a,bが等しいか否かを判断し,nilパラメータは空[]byteに相当する.func Equal(a, b []byte) bool
//s、tが似ているかどうかを判断し、大文字、小文字、タイトルの3つのフォーマットの違いを無視します.//参照unicode.SimpleFold関数.func EqualFold(s, t []byte) bool
//整理
//s両側(左、右)に含まれる文字(sを返すスライス)func Trim(s[]byte,cutset string)[]byte func TrimLeft(s[]byte,cutset string)[]byte func TrimRight(s[]byte,cutset string)[]byte
//s両側(左、右)fの要求に合う文字(sを返すスライス)func TrimFunc(s[]byte,f func(r rune)bool)[]byte func TrimLeftFunc(s[]byte,f func(r rune)bool)[]byte func TrimRightFunc(s[]byte,f func(r rune)bool)[]byte func TrimRightFunc(s[]byte,f func(r rune)bool)[]byte
//s両側の空白(unicode.IsSpace)(sのスライスを返す)func TrimSpace(s[]byte)[]byte
//sの接頭辞prefix(接尾辞suffix)(sのスライスを返す)func TrimPrefix(s,prefix[]byte)[]byte func TrimSuffix(s,suffix[]byte)[]byte
//取外し
//Splitはsepを区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.//sepが空の場合は、sをUnicode文字リストに分割します.//SplitNは分割回数nを指定することができ、nを超える部分は分割しない.func Split(s, sep []byte) [][]byte func SplitN(s, sep []byte, n int) [][]byte
//機能はSplitと同じですが、結果には区切り記号(各サブ列の末尾)が含まれています.func SplitAfter(s, sep []byte) [][]byte func SplitAfterN(s, sep []byte, n int) [][]byte
//連続空白を区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.func Fields(s []byte) [][]byte
//fに一致する文字を区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.func FieldsFunc(s []byte, f func(rune) bool) [][]byte
//sepをコネクタとして、サブシリアルテーブルsを1バイト列に接続します.func Join(s [][]byte, sep []byte) []byte
//サブストリングbをcount回繰り返して返します.func Repeat(b []byte, count int) []byte
//子串
//s接頭辞prefix(接尾辞suffix)func HasPrefix(s,prefix[]byte)bool func HasSuffix(s,suffix[]byte)bool
//bにサブストリングsubslice(文字r)func Contains(b,subslice[]byte)bool func ContainsRune(b[]byte,r rune)boolが含まれているかどうかを判断する
//bにcharsのいずれかの文字func ContainsAny(b[]byte,chars string)boolが含まれているかどうかを判断する
//サブストリングsep(バイトc、文字r)がsで初めて現れる場所を検索し、見つからない場合は-1を返します.func Index(s, sep []byte) int func IndexByte(s []byte, c byte) int func IndexRune(s []byte, r rune) int
//charsのいずれかの文字がsで初めて現れる位置を検索し、見つからない場合は-1を返します.func IndexAny(s []byte, chars string) int
//fに一致する文字がsで初めて現れる位置を検索し、見つからない場合は-1を返します.func IndexFunc(s []byte, f func(r rune) bool) int
//機能は同じですが、最後に現れた場所を探すだけです.func LastIndex(s, sep []byte) int func LastIndexByte(s []byte, c byte) int func LastIndexAny(s []byte, chars string) int func LastIndexFunc(s []byte, f func(r rune) bool) int
//sepがsに現れる回数を取得します(sepはオーバーラップできません).func Count(s, sep []byte) int
//置き換え
//sの前のn個のoldをnewに置き換え、n<0はすべてを置き換えます.func Replace(s, old, new []byte, n int) []byte
//sの文字をmapping(r)の戻り値に置き換え、//mappingが負の値を返すと、その文字を破棄します.func Map(mapping func(r rune) rune, s []byte) []byte
//sを[]runeタイプに変換してfunc Runes(s[]byte)[]runeに戻る
type Reader struct { ... }
//bをbytesに包装する.Readerオブジェクト.func NewReader(b []byte) *Reader
//bytes.Readerは以下のインタフェースを実現した://io.ReadSeeker//io.ReaderAt//io.WriterTo//io.ByteScanner//io.RuneScanner
//未読取部のデータ長func(r*Reader)Len()intを返す
//下位データの全長を返し、ReadAtの使用を便利にし、戻り値は永遠に変わらない.func (r *Reader) Size() int64
//下位データをbに切り替え、全てのタグ(読取位置等の情報)をリセットします.func (r *Reader) Reset(b []byte)
type Buffer struct { ... }
//bufをbytesに包装する.Bufferオブジェクト.func NewBuffer(buf []byte) *Buffer
//sを[]byteに変換しbytesに包装する.Bufferオブジェクト.func NewBufferString(s string) *Buffer
//Buffer自体はキャッシュ(内蔵ブロック)で、下位データがなく、キャッシュの容量は必要に応じて//自動的に調整されます.ほとんどの場合、new(Buffer)を使用するとBufferを初期化するのに十分です.
//bytes.Bufferは以下のインタフェースを実現した://io.ReadWriter//io.ReaderFrom//io.WriterTo//io.ByteWeriter//io.ByteScanner//io.RuneScanner
//未読取部のデータ長func(b*Buffer)Len()int
//キャッシュ容量func(b*Buffer)Cap()int
//前のnバイトのデータを読み込み、スライス形式で返します.データ長がn未満の場合は、すべて読み込みます.//スライスは、次の読み書き操作の前にのみ合法的です.func (b *Buffer) Next(n int) []byte
//最初のdelimとその前の内容を読み出し、遭遇したエラー(一般的にio.EOF)を返します.func (b *Buffer) ReadBytes(delim byte) (line []byte, err error) func (b *Buffer) ReadString(delim byte) (line string, err error)
//rのUTF-8符号化を書き込み、書き込みバイト数とnilを返します.//保持errはbufioに一致するためである.WriterのWriteRuneメソッド.func (b *Buffer) WriteRune(r rune) (n int, err error)
//sを書き込み、書き込みバイト数とnilを返します.func (b *Buffer) WriteString(s string) (n int, err error)
//リードされていない部分を参照するデータスライス(リード位置を移動しない)func(b*Buffer)Bytes()[]bytte
//未読取部分のデータ文字列を返す(読取位置を移動しない)func(b*Buffer)String()string
//nバイトの空き容量を確保するために、キャッシュ容量を自動的に増加します.//nが0未満または容量を増加できない場合はpanicになります.func (b *Buffer) Grow(n int)
//データ長をnバイトに短縮し、nが0未満またはCapより大きい場合はpanic.func (b *Buffer) Truncate(n int)
//バッファをリセットし、すべてのデータ(初期内容を含む)をクリアします.func (b *Buffer) Reset()
//変換
//sのすべての文字を大文字(小文字、タイトル)形式に変更して返します.func ToUpper(s []byte) []byte func ToLower(s []byte) []byte func ToTitle(s []byte) []byte
//指定したマッピングテーブルを使用して、sのすべての文字を大文字(小文字、タイトル)フォーマットに変更して返します.func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte func ToTitleSpecial(_case unicode.SpecialCase, s []byte) []byte
//sのすべての単語の先頭文字をTitle形式に変更して返します.//BUG:Unicode句読点で区切られた単語はうまく処理できません.func Title(s []byte) []byte
//比較
//2つの[]byteを比較すると、nilパラメータは空の[]byteに相当します.//ab戻り1 func Compare(a,b[]byte)int
//a,bが等しいか否かを判断し,nilパラメータは空[]byteに相当する.func Equal(a, b []byte) bool
//s、tが似ているかどうかを判断し、大文字、小文字、タイトルの3つのフォーマットの違いを無視します.//参照unicode.SimpleFold関数.func EqualFold(s, t []byte) bool
// :EqualFold
func main() {
s1 := "Φφϕ kKK"
s2 := "ϕΦφ KkK"
// s1
for _, c := range s1 {
fmt.Printf("%-5x", c)
}
fmt.Println()
// s2
for _, c := range s2 {
fmt.Printf("%-5x", c)
}
fmt.Println()
// s1 s2
fmt.Println(bytes.EqualFold([]byte(s1), []byte(s2)))
}
// :
// 3a6 3c6 3d5 20 6b 4b 212a
// 3d5 3a6 3c6 20 212a 6b 4b
// true
//整理
//s両側(左、右)に含まれる文字(sを返すスライス)func Trim(s[]byte,cutset string)[]byte func TrimLeft(s[]byte,cutset string)[]byte func TrimRight(s[]byte,cutset string)[]byte
//s両側(左、右)fの要求に合う文字(sを返すスライス)func TrimFunc(s[]byte,f func(r rune)bool)[]byte func TrimLeftFunc(s[]byte,f func(r rune)bool)[]byte func TrimRightFunc(s[]byte,f func(r rune)bool)[]byte func TrimRightFunc(s[]byte,f func(r rune)bool)[]byte
//s両側の空白(unicode.IsSpace)(sのスライスを返す)func TrimSpace(s[]byte)[]byte
//sの接頭辞prefix(接尾辞suffix)(sのスライスを返す)func TrimPrefix(s,prefix[]byte)[]byte func TrimSuffix(s,suffix[]byte)[]byte
//
func main() {
bs := [][]byte{
[]byte("Hello World !"),
[]byte("Hello !"),
[]byte("hello golang ."),
}
f := func(r rune) bool {
return bytes.ContainsRune([]byte("!!. "), r)
}
for _, b := range bs {
fmt.Printf("%q
", bytes.TrimFunc(b, f))
}
// "Hello World"
// "Hello "
// "Hello Golang"
for _, b := range bs {
fmt.Printf("%q
", bytes.TrimPrefix(b, []byte("Hello ")))
}
// "World !"
// " !"
// "hello Golang ."
}
//取外し
//Splitはsepを区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.//sepが空の場合は、sをUnicode文字リストに分割します.//SplitNは分割回数nを指定することができ、nを超える部分は分割しない.func Split(s, sep []byte) [][]byte func SplitN(s, sep []byte, n int) [][]byte
//機能はSplitと同じですが、結果には区切り記号(各サブ列の末尾)が含まれています.func SplitAfter(s, sep []byte) [][]byte func SplitAfterN(s, sep []byte, n int) [][]byte
//連続空白を区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.func Fields(s []byte) [][]byte
//fに一致する文字を区切り記号としてsを複数のサブ列に分割し、結果として区切り記号は含まれません.func FieldsFunc(s []byte, f func(rune) bool) [][]byte
//sepをコネクタとして、サブシリアルテーブルsを1バイト列に接続します.func Join(s [][]byte, sep []byte) []byte
//サブストリングbをcount回繰り返して返します.func Repeat(b []byte, count int) []byte
//
func main() {
b := []byte(" Hello World ! ")
fmt.Printf("%q
", bytes.Split(b, []byte{' '}))
// ["" "" "Hello" "" "" "World" "!" "" ""]
fmt.Printf("%q
", bytes.Fields(b))
// ["Hello" "World" "!"]
f := func(r rune) bool {
return bytes.ContainsRune([]byte(" !"), r)
}
fmt.Printf("%q
", bytes.FieldsFunc(b, f))
// ["Hello" "World"]
}
//子串
//s接頭辞prefix(接尾辞suffix)func HasPrefix(s,prefix[]byte)bool func HasSuffix(s,suffix[]byte)bool
//bにサブストリングsubslice(文字r)func Contains(b,subslice[]byte)bool func ContainsRune(b[]byte,r rune)boolが含まれているかどうかを判断する
//bにcharsのいずれかの文字func ContainsAny(b[]byte,chars string)boolが含まれているかどうかを判断する
//サブストリングsep(バイトc、文字r)がsで初めて現れる場所を検索し、見つからない場合は-1を返します.func Index(s, sep []byte) int func IndexByte(s []byte, c byte) int func IndexRune(s []byte, r rune) int
//charsのいずれかの文字がsで初めて現れる位置を検索し、見つからない場合は-1を返します.func IndexAny(s []byte, chars string) int
//fに一致する文字がsで初めて現れる位置を検索し、見つからない場合は-1を返します.func IndexFunc(s []byte, f func(r rune) bool) int
//機能は同じですが、最後に現れた場所を探すだけです.func LastIndex(s, sep []byte) int func LastIndexByte(s []byte, c byte) int func LastIndexAny(s []byte, chars string) int func LastIndexFunc(s []byte, f func(r rune) bool) int
//sepがsに現れる回数を取得します(sepはオーバーラップできません).func Count(s, sep []byte) int
//置き換え
//sの前のn個のoldをnewに置き換え、n<0はすべてを置き換えます.func Replace(s, old, new []byte, n int) []byte
//sの文字をmapping(r)の戻り値に置き換え、//mappingが負の値を返すと、その文字を破棄します.func Map(mapping func(r rune) rune, s []byte) []byte
//sを[]runeタイプに変換してfunc Runes(s[]byte)[]runeに戻る
type Reader struct { ... }
//bをbytesに包装する.Readerオブジェクト.func NewReader(b []byte) *Reader
//bytes.Readerは以下のインタフェースを実現した://io.ReadSeeker//io.ReaderAt//io.WriterTo//io.ByteScanner//io.RuneScanner
//未読取部のデータ長func(r*Reader)Len()intを返す
//下位データの全長を返し、ReadAtの使用を便利にし、戻り値は永遠に変わらない.func (r *Reader) Size() int64
//下位データをbに切り替え、全てのタグ(読取位置等の情報)をリセットします.func (r *Reader) Reset(b []byte)
//
func main() {
b1 := []byte("Hello World!")
b2 := []byte("Hello !")
buf := make([]byte, 6)
rd := bytes.NewReader(b1)
rd.Read(buf)
fmt.Printf("%q
", buf) // "Hello "
rd.Read(buf)
fmt.Printf("%q
", buf) // "World!"
rd.Reset(b2)
rd.Read(buf)
fmt.Printf("%q
", buf) // "Hello "
fmt.Printf("Size:%d, Len:%d
", rd.Size(), rd.Len())
// Size:15, Len:9
}
type Buffer struct { ... }
//bufをbytesに包装する.Bufferオブジェクト.func NewBuffer(buf []byte) *Buffer
//sを[]byteに変換しbytesに包装する.Bufferオブジェクト.func NewBufferString(s string) *Buffer
//Buffer自体はキャッシュ(内蔵ブロック)で、下位データがなく、キャッシュの容量は必要に応じて//自動的に調整されます.ほとんどの場合、new(Buffer)を使用するとBufferを初期化するのに十分です.
//bytes.Bufferは以下のインタフェースを実現した://io.ReadWriter//io.ReaderFrom//io.WriterTo//io.ByteWeriter//io.ByteScanner//io.RuneScanner
//未読取部のデータ長func(b*Buffer)Len()int
//キャッシュ容量func(b*Buffer)Cap()int
//前のnバイトのデータを読み込み、スライス形式で返します.データ長がn未満の場合は、すべて読み込みます.//スライスは、次の読み書き操作の前にのみ合法的です.func (b *Buffer) Next(n int) []byte
//最初のdelimとその前の内容を読み出し、遭遇したエラー(一般的にio.EOF)を返します.func (b *Buffer) ReadBytes(delim byte) (line []byte, err error) func (b *Buffer) ReadString(delim byte) (line string, err error)
//rのUTF-8符号化を書き込み、書き込みバイト数とnilを返します.//保持errはbufioに一致するためである.WriterのWriteRuneメソッド.func (b *Buffer) WriteRune(r rune) (n int, err error)
//sを書き込み、書き込みバイト数とnilを返します.func (b *Buffer) WriteString(s string) (n int, err error)
//リードされていない部分を参照するデータスライス(リード位置を移動しない)func(b*Buffer)Bytes()[]bytte
//未読取部分のデータ文字列を返す(読取位置を移動しない)func(b*Buffer)String()string
//nバイトの空き容量を確保するために、キャッシュ容量を自動的に増加します.//nが0未満または容量を増加できない場合はpanicになります.func (b *Buffer) Grow(n int)
//データ長をnバイトに短縮し、nが0未満またはCapより大きい場合はpanic.func (b *Buffer) Truncate(n int)
//バッファをリセットし、すべてのデータ(初期内容を含む)をクリアします.func (b *Buffer) Reset()
//
func main() {
rd := bytes.NewBufferString("Hello World!")
buf := make([]byte, 6)
//
b := rd.Bytes()
// ,
rd.Read(buf)
fmt.Printf("%s
", rd.String()) // World!
fmt.Printf("%s
", b) // Hello World!
// ,
rd.Write([]byte("abcdefg"))
fmt.Printf("%s
", rd.String()) // World!abcdefg
fmt.Printf("%s
", b) // Hello World!
// ,
rd.Read(buf)
fmt.Printf("%s
", rd.String()) // abcdefg
fmt.Printf("%s
", b) // Hello World!
}