GoDasturchi
Standard Library Interfaces: io.Reader

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:

example.go
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:

example.go
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.

Hints (0/4)

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

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

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:

example.go
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:

example.go
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.

Hints (0/4)

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