1. 程式人生 > >golang中的bytes包

golang中的bytes包

golang標準庫中提供了bytes包,該包幾乎和strings包給string提供的功能,只不過bytes包對應的是[]byte。和strings一樣,並不修改傳入變數,而是返回其副本修改之後的內容。

整個包分為以下幾種操作:轉換、比較、去除、分割、查詢、替換

一、轉換
將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)

將s的副本中的所有單詞的首字元修改為Title格式返回。

func Title(s []byte) []byte

二、比較
比較兩個[]byte,nil引數相當於[]byte{},

 a < b  返回-1
a == b 返回0
a > b   返回1
func Compare(a, b []byte) int

判斷a、b是否相等,nil引數相當[]byte{}。

func Equal(a, b []byte) bool

判斷s、t是否相似,忽略大寫、小寫、標題三種格式的區別。

func EqualFold(s, t []byte) bool

三、去除
去除s的副本左右包含cutset中的字元(返回s的副本)

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

去掉s副本的左右邊中f函式中返回true的字元

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

去除s副本兩邊的空白(unicode.IsSpace)

func TrimSpace(s []byte) []byte

去掉s副本的字首prefix(字尾suffix)

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

四、分割
Split函式以sep為分隔符將s的副本切割分成多個子串,結果不包含分隔符。
如果sep為空,則將s的副本分割成Unicode字元列表。
SplitN可以指定分割次數,超出n的部分將不進行分割,n小於0,表示分割所有。

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

功能同Spelit,只不過結果包含分隔符(在各個子串尾部)

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的副本連線成一個位元組串。

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 strings) 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中出現的次數

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


將切片b封裝成bytes.Reader物件
func NewReader(b []byte) *Reader

bytes.Reader實現瞭如下介面:
1)io.ReadeSeeker
2)io.ReaderAt
3)io.WriterTo
4)io.ByteScanner
5)io.RuneScanner

// 返回未讀取部分的資料長度
func (r *Reader) Len() int

// 返回底層資料的總長度,方便ReadAt使用,返回值不變。
func (r *Reader) Size() int64



type Buffer struct {...}
將buf包裝成bytes.Buffer物件。
func NewBuffer(buf []byte) *Buffer

轉化成bytes.Buffer物件

func NewBufferString(s string) *Buffer

Buffer是一個快取,沒有底層資料,快取的容量會根據需要自動調整。大多數情況下,使用new(Buffer)就足以初始化一個Buffer了。
bytes.Buffer實現瞭如下介面:
1)io.ReadWrite
2)io.ReaderFrom
3)io.WriterTo
4)io.ByteWriter
5)io.ByteScanner
6)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編碼,返回寫入的位元組數和error。
保留err是為了匹配bufio.Write的WriteRune

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

寫入s,返回寫入的位元組數和error。

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

引用未讀取部分的資料部分的資料切片(不移動讀取位置)

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

返回未讀取部分的資料字串(不移動讀取位置)

func (b *Buffer) String() string

自動增加快取容量,以保證有n位元組的剩餘空間。
如果n小於0或無法增加則會panic。

func (b *Buffer) Grow(n int)

將資料長度截短到n位元組,如果n小於0或大於Cap則panic。

func (b *Buffer) Teuncate(n int)

重設緩衝區,清空所有資料(包括初始內容)。

func (b *Buffer) Reset

轉載自:https://www.jianshu.com/p/bc7baa8bb286