0Pricing
Go Academy · Ders

Temel Standart Kitaplık Arayüzleri

fmt.Stringer, io.Reader, io.Writer

Temel Standart Kitaplık Arayüzleri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 2. 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.

fmt.Stringer

fmt.Stringer tek bir yönteme sahiptir: String() string. Türünüzün fmt.Println ve %v ile nasıl görüneceğini denetlemek için bu yöntemi uygulayın:

package main
import "fmt"

type Color int
const (Red Color = iota; Green; Blue)
func (c Color) String() string {
    return []string{"Red","Green","Blue"}[c]
}

func main() {
    fmt.Println(Red, Green, Blue) // Red Green Blue
}

error Arayüzü

Yerleşik error arayüzü tek bir yönteme sahiptir: Error() string. Bunu uygulayan herhangi bir tür hata olarak kullanılabilir:

package main
import "fmt"

type ValidationError struct{ Field, Msg string }
func (e *ValidationError) Error() string {
    return e.Field + ": " + e.Msg
}

func validate(age int) error {
    if age < 0 { return &ValidationError{"age", "must be non-negative"} }
    return nil
}

func main() {
    fmt.Println(validate(-1))
}

io.Reader

io.Reader tek bir yönteme sahiptir: Read(p []byte) (n int, err error). Dosyalar, HTTP gövdeleri, dizeler ve arabelleklerin tümü bunu uygular:

package main
import ("fmt"; "strings")

func countBytes(r interface{ Read([]byte)(int,error) }) int {
    buf := make([]byte, 512)
    total := 0
    for {
        n, err := r.Read(buf)
        total += n
        if err != nil { break }
    }
    return total
}

func main() {
    r := strings.NewReader("hello world")
    fmt.Println(countBytes(r)) // 11
}

io.Writer

io.Writer tek bir yönteme sahiptir: Write(p []byte) (n int, err error). fmt.Fprintf, günlükleme, HTTP yanıt yazıcıları ve diğerleri tarafından kullanılır:

package main
import ("bytes"; "fmt")

func main() {
    var buf bytes.Buffer
    fmt.Fprintf(&buf, "Hello, %s!", "Go")
    fmt.Println(buf.String()) // Hello, Go!
}

io.ReadWriter ve io.Closer

Standart kitaplık, küçük arayüzleri daha büyük arayüzlerde birleştirir:

package main
import "io"

// io.ReadWriter = io.Reader + io.Writer
// io.ReadCloser = io.Reader + io.Closer
// io.ReadWriteCloser = all three

func process(rw io.ReadWriter) {
    buf := make([]byte, 8)
    rw.Read(buf)
    rw.Write(buf)
}

func main() { _ = process }

sort.Interface

sort.Interface; Len() int, Less(i, j int) bool ve Swap(i, j int) yöntemlerini gerektirir:

package main
import ("fmt"; "sort")

type ByLength []string
func (b ByLength) Len() int           { return len(b) }
func (b ByLength) Less(i, j int) bool { return len(b[i]) < len(b[j]) }
func (b ByLength) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }

func main() {
    fruits := ByLength{"banana","apple","kiwi"}
    sort.Sort(fruits)
    fmt.Println([]string(fruits)) // [kiwi apple banana]
}

http.Handler

http.Handler tek bir yönteme sahiptir: ServeHTTP(ResponseWriter, *Request). Go'nun HTTP yığınındaki her şey bu tek arayüz üzerine kuruludur:

package main
import ("fmt"; "net/http")

type Hello struct{}
func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello, World!")
}

func main() {
    http.ListenAndServe(":8080", Hello{})
}

fmt.GoStringer

Türünüzün %#v (Go söz dizimi) gösterimini denetlemek için GoString() string yöntemini uygulayın:

package main
import "fmt"

type Version struct{ Major, Minor int }
func (v Version) GoString() string {
    return fmt.Sprintf("Version{%d, %d}", v.Major, v.Minor)
}

func main() {
    fmt.Printf("%#v\n", Version{1, 18}) // Version{1, 18}
}

encoding.TextMarshaler

Özel metin kodlaması (JSON dizeleri, YAML ve diğerleri) için MarshalText() ([]byte, error) ve UnmarshalText([]byte) error yöntemlerini uygulayın:

package main
import "fmt"

type Status int
const (Active Status = iota; Inactive)
func (s Status) MarshalText() ([]byte, error) {
    if s == Active { return []byte("active"), nil }
    return []byte("inactive"), nil
}

func main() {
    s := Active
    b, _ := s.MarshalText()
    fmt.Println(string(b)) // active
}

Standart Arayüzleri Birleştirme

Yeni türler yazmadan güçlü işlem hatları oluşturmak için standart arayüzleri io.TeeReader, io.MultiWriter ve diğerleriyle birleştirin:

package main
import ("bytes"; "fmt"; "io"; "strings")

func main() {
    r := strings.NewReader("hello")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)
    io.ReadAll(tee)
    fmt.Println(buf.String()) // hello
}

Kısa Denetim

Go'da hata olarak kullanılabilmesi için bir türün hangi arayüzü uygulaması gerekir?

Özet

Standart kitaplığın temel arayüzleri:

  • fmt.Stringer — özel yazdırma gösterimi
  • error — hata değerleri
  • io.Reader / io.Writer — akış G/Ç'si
  • sort.Interface — özel sıralama
  • http.Handler — HTTP isteği işleme

Alıştırma İstemi

Yaşa göre azalan sıralama yapmak için Person içeren bir []Person üzerinde sort.Interface uygulayın (Person'ın Name ve Age alanları vardır). Sıralanmış listeyi yazdırın.

Sıkça Sorulan Sorular

“Temel Standart Kitaplık Arayüzleri” dersi ücretsiz mi?

Evet — “Temel Standart Kitaplık Arayüzleri” 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.

“Temel Standart Kitaplık Arayüzleri” dersinde ne öğreneceğim?

fmt.Stringer, io.Reader, io.Writer 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 2. dersidir.

“Temel Standart Kitaplık Arayüzleri” 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. Arayüz Tanımlama ve Uygulama
  2. Temel Standart Kitaplık Arayüzleri
  3. Tür Doğrulamaları ve Tür Switch'leri
  4. Arayüz Birleştirme ve En İyi Uygulamalar
← Go Academy Sayfasına Dön