├── drainclose.go └── README.md /drainclose.go: -------------------------------------------------------------------------------- 1 | package drainclose 2 | 3 | import ( 4 | "io" 5 | "io/ioutil" 6 | ) 7 | 8 | func Close(body io.ReadCloser) error { 9 | if body == nil { 10 | return nil 11 | } 12 | if _, err := io.Copy(ioutil.Discard, body); err != nil { 13 | return err 14 | } 15 | return body.Close() 16 | } 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # go-drainclose 2 | 3 | Make your app 4x faster. 4 | 5 | See https://github.com/google/go-github/pull/317 6 | 7 | ## Usage 8 | 9 | ### Before 10 | 11 | ```go 12 | resp, err := http.Get(blah) 13 | if err != nil { 14 | return err 15 | } 16 | defer resp.Body.Close() 17 | json.NewDecoder(resp.Body).Decode(&data) 18 | ``` 19 | 20 | ### After 21 | 22 | ```go 23 | resp, err := http.Get(blah) 24 | if err != nil { 25 | return err 26 | } 27 | defer drainclose.Close(resp.Body) 28 | json.NewDecoder(resp.Body).Decode(&data) 29 | ``` 30 | 31 | ## License 32 | 33 | MIT 34 | 35 | ## Author 36 | 37 | Yasuhiro Matsumoto (a.k.a mattn) 38 | --------------------------------------------------------------------------------