io.Reader/Writer
byte
형식을 주고받을때 byte stream으로io.Reader
,io.Writer
인터페이스를 사용한다.

Read(p []byte) (n int, err error)
type Reader interface {
Read(p []byte) (n int, err error)
}
- 3바이트씩 Reader에서 문자열을 읽는다.
- 반복해서 읽으면, 읽고 남은 나머지 부분을 반복해서 읽는다.
- Stream의 끝은
err = io.EOF
을 통해 확인한다.
// example
func main() {
// create data source
src := strings.NewReader("Hello Amazing World!")
// create a packet
p := make([]byte, 3) // slice of length `3`
// read `src` until an error is returned
for {
// read `p` bytes from `src`
n, err := src.Read(p)
fmt.Printf("%d bytes read, data: %s\n", n, p[:n])
// handle error
if err == io.EOF {
fmt.Println("--end-of-file--")
break
} else if err != nil {
fmt.Println("Oops! Some error occured!", err)
break
}
}
}
3 bytes read, data: Hel
3 bytes read, data: lo
3 bytes read, data: Ama
3 bytes read, data: zin
3 bytes read, data: g W
3 bytes read, data: orl
2 bytes read, data: d!
0 bytes read, data:
--end-of-file--
ReadFull(r Reader, buf []byte) (n int, err error)
io.Read
와 다르게, 정해진 버퍼만큼을 꼭 읽는 것을 보장해야 한다.
ReadAll(src io.Reader) ([]byte, error)
- 모든 데이터를 읽은 byte를 반환한다.
Write(p []byte) (n int, err error)
- 주워진 바이트 변수에 데이터를 읽는다.
type Writer interface {
Write(p []byte) (n int, err error)
}
Time
// TODO !
encoding/json
// TODO !
net/http
// TODO !
ref by
Share article