Go Academy · Pelajaran

Antara Muka Stringer

Sesuaikan cara jenis dicetak

Pelajaran 3 daripada 413 langkah

Antara Muka Stringer ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Pencetakan Struktur Lalai

Secara lalai, mencetak struktur dengan %v memaparkan medan mentahnya. Ini sesuai untuk penyahpepijatan tetapi tidak semestinya mudah difahami pembaca.

package main

import "fmt"

type Color struct{ R, G, B int }

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

Antara Muka Stringer

Antara muka fmt.Stringer mempunyai satu kaedah:

  • String() string

Mana-mana jenis yang mentakrifkannya mengawal cara jenis itu dipaparkan apabila 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 Automatik

Apabila sesuatu jenis mempunyai kaedah String(), Println, Printf dengan %v atau %s, serta fungsi yang berkaitan, semuanya akan memanggilnya secara automatik.

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)
}

Memformatkan Kandungan dalam String()

Bina hasilnya dengan fmt.Sprintf untuk menghasilkan perwakilan tersuai yang kemas.

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 Jenis Bernama

Stringer bukan hanya untuk struktur. Mana-mana jenis bernama, walaupun yang berasaskan int, boleh melaksanakannya. Ini ialah corak 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 Kemas

Gabungkan iota dengan Stringer supaya pemalar dicetak sebagai nama yang mudah dibaca dan bukannya nombor.

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 berbanding Penuding

Jika String() menggunakan penerima nilai, nilai dan penuding akan dicetak dengan kemas. Dengan penerima penuding, hanya penuding yang akan mencetuskannya.

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)
}

Elakkan Rekursi Tanpa Henti

Jangan sekali-kali memanggil fmt.Sprintf("%v", t) pada jenis yang sama di dalam String() miliknya sendiri. Tindakan itu memanggil String() sekali lagi tanpa henti. Sebaliknya, formatkan medan secara terus.

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 Hirisan

Apabila Anda mencetak hirisan nilai Stringer, setiap unsur diformatkan menggunakan kaedah 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 Antara Muka

Anda boleh menyimpan mana-mana Stringer dalam pemboleh ubah fmt.Stringer dan memanggil String() melalui antara muka 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 Ia Penting

Melaksanakan Stringer memberikan jenis Anda keluaran yang kemas di mana-mana sahaja ia dicetak atau direkodkan, tanpa memerlukan kod pemformatan tambahan pada setiap tempat panggilan.

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))
}

Semakan Pantas

Apakah kaedah yang mesti ditakrifkan oleh sesuatu jenis untuk memenuhi fmt.Stringer?

Ulang Kaji: Antara Muka Stringer

Anda telah belajar menyesuaikan pencetakan:

  • Laksanakan String() string untuk memenuhi fmt.Stringer.
  • fmt memanggilnya secara automatik untuk %v dan %s.
  • Sangat berguna untuk enumerasi; elakkan %v rekursif pada jenis 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))
}
Percuma untuk bermula

Pelajari Go dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “Antara Muka Stringer” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Antara Muka Stringer”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Antara Muka Stringer”?

Sesuaikan cara jenis dicetak Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Go Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Antara Muka Stringer” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?

Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Kata Kerja Printf
  2. Sprintf dan Fprintf
  3. Antara Muka Stringer
  4. Mengimbas Input
← Kembali ke Go Academy