Standard Library Interfaces: io.Reader
Standart kutubxona interfeyslari: io.Reader
Go'ning standart kutubxonasi interfeyslar ustiga qurilgan. Eng ko'p ishlatiladigan interfeyslardan biri — io.Reader:
type Reader interface {
Read(p []byte) (n int, err error)
}Shunchaki bitta metod: Read. Siz unga baytlar sig'adigan bo'sh []byte berasiz, u esa nechta bayt yozganini (n) va biror xato bo'lsa uni (err) qaytaradi. Fayllar, tarmoq ulanishlari, strings.Reader, bytes.Buffer — ularning barchasi Read metodiga ega, shuning uchun barchasi io.Readerdir.
Oqim tugaganda, Read maxsus xato qaytaradi: io.EOF ("end of file" — fayl oxiri). Bu — Errors Are Values darsidagi g'oyaning davomi: io.EOF ham oddiy xato qiymati, faqat uni maxsus holat sifatida tekshirasiz:
buf := make([]byte, 4)
n, err := r.Read(buf)
if err == io.EOF {
// oqim tugadi, bu normal holat
}>_ Exercise
ReadAllManual(r io.Reader) (string, error) funksiyasini yozing. U 4 baytlik bufer bilan r.Read ni tsiklda chaqirib, o'qilgan baytlarni strings.Builderga yozib borishi kerak. io.EOF xatosiga yetganda tsiklni to'xtating va yig'ilgan matnni qaytaring (bu — normal tugash, xato emas). Boshqa har qanday xato bo'lsa, uni darhol qaytaring.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
io.Reader — bitta metodli (Read) interfeys, va aynan shu soddaligi tufayli fayllardan tortib tarmoq oqimigacha bo'lgan hamma narsani bir xil kod bilan ishlata olasiz. io.EOF — oddiy xato qiymati, shunchaki "oqim tugadi" degan ma'noni anglatadigan maxsus holat.
NEXT UP
Empty Interface: Working with Any Type
$ go run main.go
Kodingizni ishga tushiring