Penguraian Tag Kustom
Baca tag melalui reflection
Penguraian Tag Kustom adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Membaca Tag Sendiri
Anda dapat menentukan kunci tag sendiri dan membacanya saat program berjalan dengan paket reflect. Dengan demikian, Anda dapat membuat perilaku khusus yang digerakkan oleh metadata.
reflect.TypeOf
reflect.TypeOf mengembalikan jenis yang menjelaskan sebuah nilai. Dari jenis struktur, Anda dapat memeriksa bidang-bidangnya.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
t := reflect.TypeOf(User{})
fmt.Println(t.Kind(), t.NumField())
}Menelusuri Bidang
NumField dan Field(i) memungkinkan Anda mengulang setiap bidang dari suatu jenis struktur.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
fmt.Println(t.Field(i).Name)
}
}Mengakses Tag Bidang
Setiap bidang memiliki Tag bertipe reflect.StructTag. Panggil .Get(key) untuk membaca nilai tag tertentu.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Full Name\""
}
func main() {
f := reflect.TypeOf(User{}).Field(0)
fmt.Println(f.Tag.Get("label"))
}Mendefinisikan Tag Khusus
Anda dapat membuat kunci tag apa pun. Di sini, tag khusus label menjelaskan nama yang mudah dipahami manusia untuk setiap bidang.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email Address\""
City string "label:\"City\""
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Println(f.Name, "->", f.Tag.Get("label"))
}
}Tag.Lookup untuk Tag Opsional
Tag.Lookup(key) mengembalikan nilai dan boolean. Gunakan ini untuk menangani bidang yang mungkin tidak memiliki tag Anda.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
Token string
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
v, ok := t.Field(i).Tag.Lookup("label")
fmt.Println(t.Field(i).Name, v, ok)
}
}Membaca Nilai Bidang Juga
Gabungkan reflect.ValueOf dengan jenisnya untuk membaca tag dan nilai aktual setiap bidang.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
}
func main() {
f := Form{Email: "a@b.com"}
t := reflect.TypeOf(f)
v := reflect.ValueOf(f)
fmt.Println(t.Field(0).Tag.Get("label"), "=", v.Field(0))
}Mengurai Opsi Tag
Jika nilai tag memuat beberapa opsi (seperti name,opt), uraikan sendiri menggunakan strings.Split pada koma.
package main
import (
"fmt"
"strings"
)
func main() {
tag := "name,omitempty"
parts := strings.Split(tag, ",")
fmt.Println("name:", parts[0], "opts:", parts[1:])
}Kasus Penggunaan Mini
Gabungkan semuanya: buat peta label sederhana dari sebuah struktur, yang dapat digunakan lapisan UI untuk menampilkan label formulir.
package main
import (
"fmt"
"reflect"
)
type Profile struct {
Name string "label:\"Your Name\""
Bio string "label:\"About You\""
}
func main() {
t := reflect.TypeOf(Profile{})
labels := map[string]string{}
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
labels[f.Name] = f.Tag.Get("label")
}
fmt.Println(labels)
}Biaya Refleksi
Refleksi memang kuat, tetapi lebih lambat daripada kode langsung dan melewati pemeriksaan saat kompilasi. Gunakan refleksi untuk fitur bergaya kerangka kerja, bukan dalam perulangan yang sangat sering dieksekusi.
Penunjuk dan reflect
Jika Anda memiliki pointer, panggil reflect.TypeOf(v).Elem() untuk mencapai jenis struktur yang mendasarinya sebelum memeriksa bidang.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Name\""
}
func main() {
u := &User{}
t := reflect.TypeOf(u).Elem()
fmt.Println(t.Field(0).Tag.Get("label"))
}Pemeriksaan Singkat
Metode apa yang membaca nilai kunci tag khusus dari bidang struktur yang diperoleh melalui refleksi?
Ringkasan
Penguraian tag khusus:
- Gunakan
reflect.TypeOfdan telusuri bidang-bidang field.Tag.Get/Lookupmembaca nilai tag- Uraikan nilai untuk memproses opsi
- Kuat tetapi lebih lambat; gunakan untuk fitur kerangka kerja
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Penguraian Tag Kustom” gratis?
Ya — teks lengkap “Penguraian Tag Kustom” 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 “Penguraian Tag Kustom”?
Baca tag melalui reflection 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 4 dari 4.
Berapa lama pelajaran “Penguraian Tag Kustom” 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
- Apa Itu Tag Struct
- Tag JSON
- Pustaka Validasi
- Penguraian Tag Kustom