bytes包

[]byte字节数组操作是string外的另外一种高频操作,在golang中也专门提供了bytess包来做这种工作。功能大多数和strings类似。

Compare和Equal方法

Compare方法安装字典顺序比较ab,返回值1为a>b,0为a==b,-1为a<b。 Equal方法判断a和b的长度一致,并且a的b的byte值是一样的则为true,否则为false。

func Compare(a, b []byte) int
func Equal(a, b []byte) bool
bytes.Compare([]byte("a"), []byte("b")) //-1
bytes.Compare([]byte("a"), []byte("a")) //0
bytes.Compare([]byte("b"), []byte("a")) //-1

Contains 方法

Contains方法用来字节数组b中是否包含子字节数组subslice

func Contains(b, subslice []byte) bool
bytes.Contains([]byte("seafood"), []byte("foo")) //true
bytes.Contains([]byte("seafood"), []byte("bar")) //false

HasPrefix和HasSuffix方法

HasPrefixHasSuffix用来判断字节数组中是否包含前缀和后缀

func HasPrefix(s, prefix []]byte)) bool
func HasSuffix(s, suffix []]byte)) bool
bytes.HasPrefix([]byte("Gopher"), []byte("Go")) //true
bytes.HasSuffix([]byte("Amigo"), []byte("go")) //true

Index 方法和 LastIndex方法

Index返回子字节数组sep在字节数组s中第一次出现的位置,如果找不到,则返回 -1。 LastIndex返回子字节数组sep在字节数组s中最后一次出现的位置,如果找不到,则返回 -1。

func Index(s, sep []byte) int
func LastIndex(s, sep []byte) int
bytes.Index([]byte("chicken"), []byte("ken")) //4
bytes.Index([]byte("chicken"), []byte("dmr")) //-1

bytes.Index([]byte("go gopher"), []byte("go")) //0
bytes.LastIndex([]byte("go gopher"), []byte("go")) //3
bytes.LastIndex([]byte("go gopher"), []byte("rodent")) //-1

Join方法

Joina中的子串连接成一个单独的字符串,子串之间用sep拼接

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

Repeat方法

Repeatcount个字节数组b连接成一个新的字节数组。

func Repeat(b []byte, count int) []byte
bytes.Repeat([]byte("na"), 2)//nana

Replace和ReplaceAll方法

ReplaceReplaceAll方法为字节数组替换方法,Replace返回s的副本,并将副本中的old字符串替换为new字节数组,替换次数为n次,如果n为 -1则全部替换。

func Replace(s, old, new []byte, n int) []byte
func ReplaceAll(s, old, new []byte) []byte
bytes.Replace([]byte("oink oink oink"), []byte("k"), []byte("ky"), 2)  //oinky oinky oink
bytes.Replace([]byte("oink oink oink"), []byte("oink"), []byte("moo"), -1) // moo moo moo
bytes.ReplaceAll([]byte("oink oink oink"), []byte("oink"), []byte("moo")) // moo moo moo 功能同上

Split 方法

Split方法以sep为分隔符,将s切分成多个子字节数组,结果中不包含 sep 本身

func Split(s, sep []byte) [][]byte
bytes.Split([]byte("a,b,c"), []byte(",")) //["a" "b" "c"]
bytes.Split([]byte("a man a plan a canal panama"), []byte("a ")) //["" "man " "plan " "canal panama"]
bytes.Split([]byte(" xyz "), []byte("")) //[" " "x" "y" "z" " "]
bytes.Split([]byte(""), []byte("Bernardo O'Higgins")) //[""]

Trim、TrimSpace、TrimPrefix,TrimSuffix方法

Trim将删除s首尾连续的包含在cutset中的字符 TrimSpace将删除s首尾连续的的空白字符 TrimPrefix删除s头部的prefix字符串 TrimSuffix 删除s尾部的suffix字符串

func Trim(s []byte, cutset string) []byte
func TrimSpace(s []byte) []byte
func TrimPrefix(s, prefix []byte) []byte
func TrimSuffix(s, suffix []byte) []byte
bytes.Trim([]byte(" !!! Achtung! Achtung! !!! "), "! ") //Achtung! Achtung
bytes.TrimSpace([]byte(" \t\n Hello, Gophers \n\t\r\n"))//Hello, Gophers

var s = []byte("¡¡¡Hello, Gophers!!!")
bytes.TrimPrefix(s, []byte("¡¡¡Hello, "))  //Gophers!!!
bytes.TrimSuffix(s, []byte(", Gophers!!!")) //¡¡¡Hello

参考资料

go bytes官方文档