Reader 인터페이스
Go 입출력의 핵심
Reader 인터페이스은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
Go 입출력의 핵심
io.Reader는 Go의 모든 입력을 통합하는 하나의 인터페이스입니다. 파일, 네트워크 연결, 문자열, 압축 스트림 등을 모두 포함합니다.
io.Reader를 받는 코드는 어떤 소스와도 함께 작동합니다.
인터페이스 정의
계약은 매우 간단합니다.
Read(p []byte) (n int, err error)
p를 최대 len(p)개의 바이트로 채우고, 그중 몇 개를 채웠는지(n)와 오류를 반환합니다.
문자열에서 읽기
strings.NewReader는 문자열을 io.Reader로 변환합니다.
package main
import (
"fmt"
"strings"
)
func main() {
r := strings.NewReader("Hello")
buf := make([]byte, 5)
n, _ := r.Read(buf)
fmt.Printf("read %d bytes: %s\n", n, buf[:n])
}n을 먼저 처리하고 오류를 확인하는 규칙
하나의 Read 호출에서 n > 0개의 바이트와 오류를 함께 반환할 수 있습니다. 항상 n개의 바이트를 먼저 처리한 다음 오류를 확인하십시오.
반복하며 읽기
한 번의 Read가 요청한 바이트보다 적게 반환할 수 있으므로 대부분의 리더에는 반복문이 필요합니다.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("abcdef")
buf := make([]byte, 2)
for {
n, err := r.Read(buf)
if n > 0 {
fmt.Printf("%s ", buf[:n])
}
if err == io.EOF {
break
}
}
fmt.Println()
}io.ReadAll
데이터가 작고 범위가 정해져 있다면 io.ReadAll이 모든 내용을 바이트 슬라이스로 읽어 줍니다.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := strings.NewReader("read it all")
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}바이트에서 리더 만들기
bytes.NewReader는 바이트 슬라이스를 감쌉니다. 이미 메모리에 데이터가 있을 때 유용합니다.
package main
import (
"bytes"
"fmt"
"io"
)
func main() {
r := bytes.NewReader([]byte{72, 105})
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}리더를 받는 함수
구체적인 형식이 아니라 io.Reader를 받는 함수를 작성하십시오. 그러면 같은 함수로 파일, 소켓 또는 테스트 문자열에서 읽을 수 있습니다.
package main
import (
"fmt"
"io"
"strings"
)
func countBytes(r io.Reader) int {
data, _ := io.ReadAll(r)
return len(data)
}
func main() {
fmt.Println(countBytes(strings.NewReader("hello")))
}io.EOF는 오류가 아닙니다
io.EOF는 스트림이 끝났다는 정상적인 신호로 처리하고 실패로 보지 마십시오. 다른 오류만 실제 문제를 나타냅니다.
LimitReader
io.LimitReader(r, n)은 n개의 바이트를 읽은 뒤 중지하도록 리더를 감쌉니다. 읽을 수 있는 양을 제한할 때 편리합니다.
package main
import (
"fmt"
"io"
"strings"
)
func main() {
r := io.LimitReader(strings.NewReader("abcdefgh"), 3)
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}하나의 인터페이스가 유리한 이유
- 코드를 데이터 소스와 분리함
- 문자열이나 바이트를 사용해 쉽게 테스트할 수 있음
- LimitReader, gzip 등의 래퍼와 조합할 수 있음
빠른 확인
io.Reader에 대한 지식을 테스트해 보십시오.
복습
핵심 입력 인터페이스를 배웠습니다.
Read(p []byte) (int, error)가 전체 계약임io.EOF까지 반복하고, n개의 바이트를 먼저 처리io.ReadAll,strings/bytes.NewReader,LimitReader- API에서
io.Reader를 받기
자주 묻는 질문
“Reader 인터페이스” 강의는 무료인가요?
네 — “Reader 인터페이스” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Reader 인터페이스”에서 뭘 배우나요?
Go 입출력의 핵심 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“Reader 인터페이스” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Reader 인터페이스
- Writer 인터페이스
- io 유틸리티 함수
- 사용자 지정 Reader 구현하기