This is a creation in Article, where the information may have evolved or changed.
Some abstract interfaces
Read related
name |
function |
Notes |
Read |
Read interface |
1 |
Readcloser |
Read interface (includes close interface) |
2 |
Readseeker |
Where to read from? |
3 |
Readerat |
Start reading from a certain distance |
4 |
Readerfrom |
Contains the Readform method, read to EOF, or error stop. Returns the number of bytes read |
5 |
Write related
name |
function |
Notes |
Writer |
Read interface |
1 |
Writecloser |
Read interface (includes close interface) |
2 |
Writeseeker |
Where to read from? |
3 |
Writerat |
Start reading from a certain distance |
4 |
Writerto |
Contains the Writerto method, read to EOF, or error stop. Returns the number of bytes written |
Several function methods
1. Copy (internally implemented Readerfrom and Writerto interfaces)
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*/