Reader'lar
io paketi ma'lumotlar oqimining o'qish uchini ifodalovchi io.Reader interface'ini belgilaydi.
Go standart kutubxonasi bu interface'ning ko'plab amalga oshirilishini o'z ichiga oladi: fayllar, tarmoq ulanishlari, kompressorlar, shifrlar va boshqalar.
io.Reader interface'ida Read metodi bor:
func (T) Read(b []byte) (n int, err error)
Readberilgan bayt slice'ini ma'lumotlar bilan to'ldiradi va to'ldirilgan baytlar sonini hamda xato qiymatini qaytaradi. Oqim tugaganda uio.EOFxatosini qaytaradi.
Misol kod strings.Reader yaratadi va uning chiqishini har safar 8 baytdan o'qib chiqadi.
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
OqibChiq(r io.Reader) (string, error) funksiyasini yozing: r dan Read metodi bilan (masalan, 4 baytlik bo'laklarda) oxirigacha (io.EOF) o'qib, hammasini bitta satr qilib qaytarsin. Xato faqat io.EOF dan boshqa bo'lsa qaytarilsin.
BaytSoni(r io.Reader) int funksiyasini yozing: r dagi jami baytlar sonini o'qib sanab, qaytarsin. Masalan, BaytSoni(strings.NewReader("salom")) — 5.