Reader 用法
最后更新于:2022-04-02 02:36:56
[TOC]
## Reader
Reader
```
type Reader interface {
Read(p []byte) (n int, err error)
}
```
示例
```
type User struct {
s string
i int
}
func NewUser(s string) *User {
return &User{s: s}
}
func (u *User) Len() int {
return len(u.s) - u.i
}
// 实现 Reader 接口
func (u *User) Read(p []byte) (n int, err error) {
// i 还没到结尾 && n 的大小不大于p 的切片长度
for u.i < len(u.s) && n < len(p) {
p[n] = u.s[u.i]
n++
u.i++
}
if n == 0 {
return 0, io.EOF
}
return n, nil
}
func main() {
user := NewUser("hello world")
b := make([]byte, user.Len())
n, err := io.ReadFull(user, b)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", n)
fmt.Printf("%+v\n", string(b)) //hello world
}
```
';