github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/iox/iox.go (about) 1 package iox 2 3 import ( 4 "bufio" 5 "io" 6 "log" 7 ) 8 9 type BufioWriteCloser struct { 10 closer io.WriteCloser 11 *bufio.Writer 12 } 13 14 func NewBufioWriteCloser(w io.WriteCloser) *BufioWriteCloser { 15 return &BufioWriteCloser{closer: w, Writer: bufio.NewWriter(w)} 16 } 17 18 func (b *BufioWriteCloser) Close() error { 19 _ = b.Writer.Flush() 20 return b.closer.Close() 21 } 22 23 func ReadString(r io.Reader) string { 24 return string(ReadBytes(r)) 25 } 26 27 func ReadBytes(r io.Reader) []byte { 28 data, err := io.ReadAll(r) 29 if err != nil { 30 log.Printf("read bytes failed: %v", err) 31 } 32 33 return data 34 } 35 36 // DiscardClose discards the reader and then close it. 37 func DiscardClose(c io.ReadCloser) { 38 if c != nil { 39 _, _ = io.Copy(io.Discard, c) 40 Close(c) 41 } 42 }