多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[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 } ```