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.Stringerarayüzünü karşılamak içinString() stringyöntemini uygulayın.fmt,%vve%siçin bu yöntemi otomatik olarak çağırır.- Numaralandırmalar için çok uygundur; aynı tür üzerinde özyinelemeli
%vkullanı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
- Printf Fiilleri
- Sprintf ve Fprintf
- Stringer Arayüzü
- Girdiyi Tarama