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