关于bytes包

byte包包含处理字节切片的函数,方法与帮助处理字符串的strings包方法相同。Go源代码文件的名称是bytes.go。它分为三部分。

这部分内容不包含在Go系统编程中,Packet出版,2017

byte.go第一部分代码如下:

  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "os"
  7. )

byte.go第二部分代码如下:

  1. func main() {
  2. var buffer bytes.Buffer
  3. buffer.Write([]byte("This is"))
  4. fmt.Fprintf(&buffer, " a string!\n")
  5. buffer.WriteTo(os.Stdout)
  6. buffer.WriteTo(os.Stdout)

首先,创建一个新的bytes.Buffer变量,通过buffer.Write()fmt.Fprintf()写入数据。然后调用buffer.WriteTo()两次。

第一次调用buffer.WriteTo()将打印buffer的内容。然而,第二次调用buffer.WriteTo()将不会有任何输出,因为在第一次调用后,buffer内容为空。

bytes.go最后一部分代码如下:

  1. buffer.Reset()
  2. buffer.Write([]byte("Mastering Go!"))
  3. r := bytes.NewReader([]byte(buffer.String()))
  4. fmt.Println(buffer.String())
  5. for {
  6. b := make([]byte, 3)
  7. n, err := r.Read(b)
  8. if err == io.EOF {
  9. break
  10. }
  11. if err != nil {
  12. fmt.Println(err)
  13. continue
  14. }
  15. fmt.Printf("Read %s Bytes: %d\n", b, n)
  16. }
  17. }

Reset()方法重置buffer变量,通过Write()方法再次写入一些数据。然后你可以通过bytes.NewReader()创建新的读对象,再使用io.Reader接口方法Read()buffer变量读取数据。

执行bytes.go会产生如下的输出:

  1. $ go run byte.go
  2. This is a string!
  3. Mastering Go!
  4. Read Mas Bytes: 3
  5. Read ter Bytes: 3
  6. Read ing Bytes: 3
  7. Read Go Bytes: 3
  8. Read ! Bytes: 1