0Pricing
Go Academy · Ders

Özel Reader'lar Uygulama

Kendi akışlarınızı oluşturun

Özel Reader'lar Uygulama, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

Kendi Akışlarınızı Oluşturun

Tek yöntemli io.Reader arayüzünü uygulayarak özel veri kaynakları oluşturabilirsiniz. Türünüz böylece tüm io yardımcılarıyla çalışır.

Uygulanacak Yöntem

Türünüz üzerinde Read(p []byte) (n int, err error) yöntemini uygulayın. p'yi doldurun, sayıyı döndürün ve işlem tamamlandığında io.EOF döndürün.

Sabit Bir Okuyucu

Burada, LimitReader ile sınırlandırılmış ve sürekli aynı baytı üreten bir okuyucu yer alıyor.

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 Bildirimi

Kaynağınız tükendiğinde io.EOF döndürün. Bunu tek başına veya son baytlarla birlikte döndürebilirsiniz.

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))
}

Bir Dilimden Okuma

Özel bir okuyucu, temel verilerdeki konumu izleyebilir ve her çağrıda bir parça döndürebilir.

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))
}

Dönüştüren Bir Okuyucu

Başka bir okuyucuyu sarmalayın ve baytları anında dönüştürün; burada her bayt, akış sırasında büyük harfe dönüştürülür.

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))
}

Arabellek Uzunluğuna Uyun

Hiçbir zaman len(p) değerinden fazla bayt yazmayın. Daha küçük dilimin sınırını aşmayan copy(p, src) işlevini kullanın ve kopyaladığı miktarı döndürün.

Değer ve İşaretçi Alıcıları

Okuyucunuz konum veya durum izliyorsa, değişikliklerin çağrılar arasında korunması için bir işaretçi alıcısı kullanın. Durumsuz okuyucular değer alıcısı kullanabilir.

io Yardımcılarıyla Birleştirme

Türünüz io.Reader arayüzünü karşıladığı için ek bir işlem yapmadan io.Copy, bufio.NewReader, io.LimitReader ve daha fazlasına eklenebilir.

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")
}

Yaygın Tuzaklar

  • io.EOF döndürmeyi unutmak (sonsuz okuma)
  • len(p) sınırını aşarak yazmak
  • Durum tutan okuyucular için değer alıcısı kullanmak

Özel Okuyucular Neden Kullanılır

Özel okuyucular; üreteçleri, kod çözücüleri, hız sınırlayıcıları ve şifrelenmiş akışları evrensel Go G/Ç ekosistemine uyarlamanızı sağlar.

Hızlı Kontrol

Özel okuyucular bilginizi sınayın.

Özet

Kendi akışlarınızı oluşturmayı öğrendiniz.

  • Read(p []byte) (int, error) yöntemini uygulayın
  • copy kullanın ve len(p) sınırına uyun
  • İşlem tamamlandığında io.EOF döndürün
  • Durum tutan okuyucular için işaretçi alıcısı kullanın
  • Tüm io yardımcılarıyla ek bir işlem yapmadan birleştirin

Sıkça Sorulan Sorular

“Özel Reader'lar Uygulama” dersi ücretsiz mi?

Evet — “Özel Reader'lar Uygulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“Özel Reader'lar Uygulama” dersinde ne öğreneceğim?

Kendi akışlarınızı oluşturun Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Özel Reader'lar Uygulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Reader Arayüzü
  2. Writer Arayüzü
  3. io Yardımcı İşlevleri
  4. Özel Reader'lar Uygulama
← Go Academy Sayfasına Dön