0Pricing
Go Academy · Pelajaran

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.TypeOf dan telusuri bidang-bidang
  • field.Tag.Get / Lookup membaca 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

  1. Apa Itu Tag Struct
  2. Tag JSON
  3. Pustaka Validasi
  4. Penguraian Tag Kustom
← Kembali ke Go Academy