0Pricing
Go Academy · Pelajaran

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() string agar memenuhi fmt.Stringer.
  • fmt memanggilnya secara otomatis untuk %v dan %s.
  • Sangat berguna untuk enumerasi; hindari %v rekursif 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

  1. Kata Kerja Printf
  2. Sprintf dan Fprintf
  3. Interface Stringer
  4. Memindai Input
← Kembali ke Go Academy