Interface Stringer
Sesuaikan cara tipe dicetak
Interface Stringer adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Pencetakan Struktur Bawaan
Secara bawaan, mencetak struktur dengan %v menampilkan bidang mentahnya. Ini cukup untuk penelusuran kesalahan, tetapi tidak selalu mudah dibaca.
package main
import "fmt"
type Color struct{ R, G, B int }
func main() {
c := Color{255, 0, 0}
fmt.Println(c)
}Antarmuka Stringer
Antarmuka fmt.Stringer memiliki satu metode:
String() string
Tipe apa pun yang mendefinisikannya dapat mengatur tampilannya saat dicetak.
package main
import "fmt"
type Greeting struct{ Name string }
func (g Greeting) String() string {
return "Hello, " + g.Name
}
func main() {
fmt.Println(Greeting{"Ada"})
}Digunakan Secara Otomatis
Ketika suatu tipe memiliki metode String(), Println, Printf dengan %v atau %s, serta fungsi sejenis akan memanggilnya secara otomatis.
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)
}Memformat di Dalam String()
Bangun hasilnya dengan fmt.Sprintf untuk menghasilkan representasi khusus yang rapi.
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})
}Stringer pada Tipe Bernama
Stringer bukan hanya untuk struktur. Tipe bernama apa pun, bahkan yang didasarkan pada int, dapat mengimplementasikannya. Ini adalah pola enumerasi klasik.
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))
}Enumerasi yang Dicetak dengan Baik
Gabungkan iota dengan Stringer agar konstanta dicetak sebagai nama yang mudah dibaca, bukan angka.
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)
}Penerima Nilai vs Penunjuk
Jika String() menggunakan penerima nilai, baik nilai maupun penunjuk akan dicetak dengan baik. Dengan penerima penunjuk, hanya penunjuk yang memicunya.
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)
}Hindari Rekursi Tanpa Akhir
Jangan pernah memanggil fmt.Sprintf("%v", t) pada tipe yang sama di dalam String() miliknya sendiri. Hal itu memanggil String() lagi tanpa akhir. Format bidang-bidangnya secara langsung.
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})
}Stringer dalam Irisan
Ketika Anda mencetak irisan nilai Stringer, setiap elemen diformat dengan metode String() miliknya.
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)
}Menggunakannya sebagai Antarmuka
Anda dapat menyimpan Stringer apa pun dalam variabel fmt.Stringer dan memanggil String() melalui antarmuka tersebut.
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())
}Mengapa Ini Penting
Mengimplementasikan Stringer memberikan keluaran yang rapi untuk tipe Anda di mana pun tipe tersebut dicetak atau dicatat, tanpa kode pemformatan tambahan di setiap lokasi pemanggilan.
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))
}Pemeriksaan Singkat
Metode apa yang harus didefinisikan oleh suatu tipe agar memenuhi fmt.Stringer?
Ringkasan: Antarmuka Stringer
Anda telah mempelajari cara menyesuaikan pencetakan:
- Implementasikan
String() stringagar memenuhifmt.Stringer. fmtmemanggilnya secara otomatis untuk%vdan%s.- Sangat berguna untuk enumerasi; hindari
%vrekursif pada tipe yang sama.
package main
import "fmt"
type Level int
func (l Level) String() string {
return []string{"low", "mid", "high"}[l]
}
func main() {
fmt.Println(Level(2))
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “Interface Stringer” gratis?
Ya — teks lengkap “Interface Stringer” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Interface Stringer”?
Sesuaikan cara tipe dicetak Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Interface Stringer” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kata Kerja Printf
- Sprintf dan Fprintf
- Interface Stringer
- Memindai Input