Mukautettujen lukijoiden toteuttaminen
Rakenna omia virtoja
Mukautettujen lukijoiden toteuttaminen on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.
Omien virtojen rakentaminen
Voitte luoda mukautettuja tietolähteitä toteuttamalla yksimetodisen io.Reader-rajapinnan. Tyyppinne toimii sen jälkeen kaikkien io-apuohjelmien kanssa.
Toteutettava metodi
Toteuttakaa tyypillenne Read(p []byte) (n int, err error). Täyttäkää p, palauttakaa tavujen määrä ja palauttakaa io.EOF, kun kaikki tiedot on luettu.
Vakiolukija
Tässä lukija tuottaa samaa tavua loputtomasti, ja sen tulosta rajoitetaan LimitReaderilla.
package main
import (
"fmt"
"io"
)
type constReader struct{ ch byte }
func (c constReader) Read(p []byte) (int, error) {
for i := range p {
p[i] = c.ch
}
return len(p), nil
}
func main() {
r := io.LimitReader(constReader{ch: 'A'}, 5)
data, _ := io.ReadAll(r)
fmt.Println(string(data))
}EOF:n ilmoittaminen
Palauttakaa io.EOF, kun lähde on käytetty loppuun. Voitte palauttaa sen yksinään tai viimeisten tavujen kanssa.
package main
import (
"fmt"
"io"
)
type oneShot struct{ done bool }
func (o *oneShot) Read(p []byte) (int, error) {
if o.done {
return 0, io.EOF
}
o.done = true
n := copy(p, []byte("once"))
return n, nil
}
func main() {
data, _ := io.ReadAll(&oneShot{})
fmt.Println(string(data))
}Viipaleesta lukeminen
Mukautettu lukija voi seurata sijaintia taustalla olevissa tiedoissa ja palauttaa jokaisella kutsulla osan niistä.
package main
import (
"fmt"
"io"
)
type sliceReader struct {
data []byte
pos int
}
func (s *sliceReader) Read(p []byte) (int, error) {
if s.pos >= len(s.data) {
return 0, io.EOF
}
n := copy(p, s.data[s.pos:])
s.pos += n
return n, nil
}
func main() {
r := &sliceReader{data: []byte("custom")}
out, _ := io.ReadAll(r)
fmt.Println(string(out))
}Muuntava lukija
Toisen lukijan voi kääriä ja muuntaa tavuja lennossa — tässä esimerkissä jokainen tavu muutetaan suuraakkoseksi sen virratessa.
package main
import (
"bytes"
"fmt"
"io"
)
type upper struct{ r io.Reader }
func (u upper) Read(p []byte) (int, error) {
n, err := u.r.Read(p)
for i := 0; i < n; i++ {
if p[i] >= 'a' && p[i] <= 'z' {
p[i] -= 32
}
}
return n, err
}
func main() {
out, _ := io.ReadAll(upper{r: bytes.NewReader([]byte("hello"))})
fmt.Println(string(out))
}Puskurin pituuden noudattaminen
Älkää koskaan kirjoittako enempää kuin len(p) tavua. Käyttäkää copy(p, src)-funktiota, jota pienempi viipale rajoittaa, ja palauttakaa kopioitujen tavujen määrä.
Arvo- ja osoitinvastaanottimet
Jos lukijanne seuraa sijaintia tai muuta tilaa, käyttäkää osoitinvastaanotinta, jotta muutokset säilyvät kutsujen välillä. Tilattomat lukijat voivat käyttää arvovastaanotinta.
Koostaminen io-apufunktioilla
Koska tyyppinne toteuttaa io.Reader-rajapinnan, se sopii sellaisenaan yhteen io.Copy-, bufio.NewReader- ja io.LimitReader-funktioiden sekä monien muiden kanssa.
package main
import (
"io"
"os"
)
type dots struct{ left int }
func (d *dots) Read(p []byte) (int, error) {
if d.left == 0 {
return 0, io.EOF
}
p[0] = '.'
d.left--
return 1, nil
}
func main() {
io.Copy(os.Stdout, &dots{left: 4})
os.Stdout.WriteString("\n")
}Yleiset sudenkuopat
io.EOF-arvon palauttaminen unohtuu (lukeminen jatkuu loputtomasti)len(p)-rajan yli kirjoittaminen- Arvovastaanottimen käyttäminen tilallisessa lukijassa
Miksi mukautettuja lukijoita käytetään
Niiden avulla minkä tahansa lähteen — generaattorit, dekooderit, nopeusrajoittimet ja salatut virrat — voi sovittaa osaksi Go:n yleistä I/O-ekosysteemiä.
Pikatarkistus
Testatkaa mukautettuja lukijoita koskeva osaamisenne.
Kertaus
Olette oppineet rakentamaan omia virtoja.
- Toteuttakaa
Read(p []byte) (int, error) - Käyttäkää
copy-funktiota ja noudattakaalen(p)-rajaa - Palauttakaa
io.EOF, kun kaikki tiedot on luettu - Käyttäkää osoitinvastaanotinta tilallisissa lukijoissa
- Koostakaa ratkaisut kaikkien
io-apuohjelmien kanssa
Opi Go tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Mukautettujen lukijoiden toteuttaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “Mukautettujen lukijoiden toteuttaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Mukautettujen lukijoiden toteuttaminen”?
Rakenna omia virtoja Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Mukautettujen lukijoiden toteuttaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?
Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Reader-rajapinta
- Writer-rajapinta
- io-apufunktiot
- Mukautettujen lukijoiden toteuttaminen