Antara Muka Stringer
Sesuaikan cara jenis dicetak
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() stringuntuk memenuhifmt.Stringer. fmtmemanggilnya secara automatik untuk%vdan%s.- Sangat berguna untuk enumerasi; elakkan
%vrekursif 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))
}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
- Kata Kerja Printf
- Sprintf dan Fprintf
- Antara Muka Stringer
- Mengimbas Input