這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
一些抽象化的介面
讀相關
| 名稱 |
作用 |
備忘 |
| Read |
讀介面 |
1 |
| ReadCloser |
讀介面(包含 Close介面) |
2 |
| ReadSeeker |
從哪裡讀到哪裡 |
3 |
| ReaderAt |
從一定距離開始讀 |
4 |
| ReaderFrom |
包含 ReadForm方法,讀到Eof 或 error停止。返回讀到的位元組數 |
5 |
寫相關
| 名稱 |
作用 |
備忘 |
| Writer |
讀介面 |
1 |
| WriteCloser |
讀介面(包含 Close介面) |
2 |
| WriteSeeker |
從哪裡讀到哪裡 |
3 |
| WriterAt |
從一定距離開始讀 |
4 |
| WriterTo |
包含 WriterTo 方法,讀到Eof 或 error停止。返回寫入的位元組數 |
幾個函數方法
1. Copy (內部實現了 ReaderFrom 和 WriterTo 介面)
func Copy(dst Writer, src Reader) (written int64, err error)
// 將字串變成 Readerr := strings.NewReader("some io.Reader stream to be read\n")if _, err := io.Copy(os.Stdout, r); err != nil { log.Fatal(err)}
2. CopyBuffer
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
r1 := strings.NewReader("first reader\n")r2 := strings.NewReader("second reader\n")buf := make([]byte, 8)// buf is used here...if _, err := io.CopyBuffer(os.Stdout, r1, buf); err != nil { log.Fatal(err)}// ... reused here also. No need to allocate an extra buffer.if _, err := io.CopyBuffer(os.Stdout, r2, buf); err != nil { log.Fatal(err)}/* output:first reader second reader*/
3. ReadFull
func ReadFull(r Reader, buf []byte) (n int, err error)
r := strings.NewReader("some io.Reader stream to be read\n")buf := make([]byte, 4)if _, err := io.ReadFull(r, buf); err != nil { log.Fatal(err)}fmt.Printf("%s\n", buf)// minimal read size bigger than io.Reader streamlongBuf := make([]byte, 64)if _, err := io.ReadFull(r, longBuf); err != nil { fmt.Println("error:", err)}/*output:someerror: unexpected EOF*/
4. WriteString
func WriteString(w Writer, s string) (n int, err error)
io.WriteString(os.Stdout, "Hello World")/*output:Hello World*/