0Pricing
Go Academy · Ders

Stringer Arayüzü

Türlerin nasıl yazdırılacağını özelleştirin

Stringer Arayüzü, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. 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.

Varsayılan Yapı Yazdırma

Varsayılan olarak bir yapının %v ile yazdırılması ham alanlarını gösterir. Bu, hata ayıklama için uygundur ancak okuyucu açısından her zaman anlaşılır değildir.

package main

import "fmt"

type Color struct{ R, G, B int }

func main() {
    c := Color{255, 0, 0}
    fmt.Println(c)
}

Stringer Arayüzü

fmt.Stringer arayüzünde tek bir yöntem vardır:

  • String() string

Bunu tanımlayan her tür, yazdırıldığında nasıl görüneceğini denetler.

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hello, " + g.Name
}

func main() {
    fmt.Println(Greeting{"Ada"})
}

Otomatik Olarak Kullanılır

Bir türde String() yöntemi bulunduğunda Println, %v veya %s kullanan Printf ve benzerleri bu yöntemi otomatik olarak çağırır.

package main

import "fmt"

type Greeting struct{ Name string }

func (g Greeting) String() string {
    return "Hi " + g.Name
}

func main() {
    g := Greeting{"Bob"}
    fmt.Printf("%s and %v\n", g, g)
}

String() İçinde Biçimlendirme

Temiz ve özel bir gösterim oluşturmak için sonucu fmt.Sprintf ile oluşturun.

package main

import "fmt"

type Color struct{ R, G, B int }

func (c Color) String() string {
    return fmt.Sprintf("rgb(%d, %d, %d)", c.R, c.G, c.B)
}

func main() {
    fmt.Println(Color{255, 128, 0})
}

Adlandırılmış Türlerde Stringer

Stringer yalnızca yapılar için değildir. int temel alınarak oluşturulan bir tür de dahil olmak üzere her adlandırılmış tür bunu uygulayabilir. Bu, klasik numaralandırma kalıbıdır.

package main

import "fmt"

type Day int

func (d Day) String() string {
    names := []string{"Mon", "Tue", "Wed"}
    return names[d]
}

func main() {
    fmt.Println(Day(1))
}

Güzel Yazdırılan Numaralandırmalar

Sabitlerin sayılar yerine okunabilir adlar olarak yazdırılması için iota ile Stringer'ı birleştirin.

package main

import "fmt"

type State int

const (
    Idle State = iota
    Running
    Done
)

func (s State) String() string {
    return []string{"Idle", "Running", "Done"}[s]
}

func main() {
    fmt.Println(Running)
}

Değer ve İşaretçi Alıcısı Karşılaştırması

String() bir değer alıcısı kullanıyorsa hem değerler hem de işaretçiler düzgün şekilde yazdırılır. İşaretçi alıcısı kullanıldığında yalnızca işaretçiler bunu tetikler.

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    t := Tag{"go"}
    fmt.Println(t)
    fmt.Println(&t)
}

Sonsuz Özyinelemeden Kaçınma

Kendi String() yönteminizin içinde aynı tür üzerinde hiçbir zaman fmt.Sprintf("%v", t) çağrısı yapmayın. Bu, String() yöntemini sonsuza kadar yeniden çağırır. Alanları doğrudan biçimlendirin.

package main

import "fmt"

type Money struct{ Cents int }

func (m Money) String() string {
    return fmt.Sprintf("$%.2f", float64(m.Cents)/100)
}

func main() {
    fmt.Println(Money{1050})
}

Dilimlerde Stringer

Stringer değerlerinden oluşan bir dilim yazdırdığınızda her öğe kendi String() yöntemiyle biçimlendirilir.

package main

import "fmt"

type Tag struct{ Name string }

func (t Tag) String() string { return "#" + t.Name }

func main() {
    tags := []Tag{{"go"}, {"web"}}
    fmt.Println(tags)
}

Arayüz Olarak Kullanma

Herhangi bir Stringer'ı bir fmt.Stringer değişkeninde saklayabilir ve String() yöntemini arayüz üzerinden çağırabilirsiniz.

package main

import "fmt"

type City struct{ Name string }

func (c City) String() string { return "City of " + c.Name }

func main() {
    var s fmt.Stringer = City{"Oslo"}
    fmt.Println(s.String())
}

Neden Önemli?

Stringer'ı uygulamak, türlerinizin yazdırıldığı veya günlüğe kaydedildiği her yerde temiz çıktı sağlar; her çağrı noktasında ek biçimlendirme kodu yazmanız gerekmez.

package main

import "fmt"

type Temp float64

func (t Temp) String() string {
    return fmt.Sprintf("%.1f°C", float64(t))
}

func main() {
    fmt.Println(Temp(21.5))
}

Hızlı Kontrol

fmt.Stringer arayüzünü karşılamak için bir tür hangi yöntemi tanımlamalıdır?

Özet: Stringer Arayüzü

Yazdırmayı özelleştirmeyi öğrendiniz:

  • fmt.Stringer arayüzünü karşılamak için String() string yöntemini uygulayın.
  • fmt, %v ve %s için bu yöntemi otomatik olarak çağırır.
  • Numaralandırmalar için çok uygundur; aynı tür üzerinde özyinelemeli %v kullanımından kaçının.
package main

import "fmt"

type Level int

func (l Level) String() string {
    return []string{"low", "mid", "high"}[l]
}

func main() {
    fmt.Println(Level(2))
}

Sıkça Sorulan Sorular

“Stringer Arayüzü” dersi ücretsiz mi?

Evet — “Stringer Arayüzü” 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.

“Stringer Arayüzü” dersinde ne öğreneceğim?

Türlerin nasıl yazdırılacağını özelleştirin 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 3. dersidir.

“Stringer Arayüzü” 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. Printf Fiilleri
  2. Sprintf ve Fprintf
  3. Stringer Arayüzü
  4. Girdiyi Tarama
← Go Academy Sayfasına Dön