0Pricing
Go Academy · Pelajaran

Memeriksa Field dan Tag Struct

Melakukan iterasi pada field dan membaca tag struct

Memeriksa Field dan Tag Struct adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Tipe StructField

reflect.StructField menjelaskan satu bidang struct: Name, Type, Tag, Index, Offset, Anonymous, dan IsExported.

Mengiterasi bidang

Ulangi semua bidang dari suatu tipe struct:

t := reflect.TypeOf(struct{ ID int; Name string }{})
for i := 0; i < t.NumField(); i++ {
    f := t.Field(i)
    fmt.Println(f.Name, f.Type, f.IsExported())
}

Membaca penanda struct

Penanda diakses melalui StructField.Tag.Get("key"):

type User struct {
    ID   int    `json:"id" db:"user_id"`
    Name string `json:"name,omitempty"`
}

f, _ := reflect.TypeOf(User{}).FieldByName("Name")
fmt.Println(f.Tag.Get("json")) // "name,omitempty"

Menguraikan opsi penanda

Penanda dapat berisi opsi yang dipisahkan koma. Uraikan dengan strings.Split:

tag := f.Tag.Get("json") // "name,omitempty"
parts := strings.Split(tag, ",")
name := parts[0] // "name"
omitempty := len(parts) > 1 && parts[1] == "omitempty"

FieldByName dan FieldByIndex

Cari bidang berdasarkan nama atau indeks. FieldByName mencari bidang yang diekspor dalam struct dan struct yang disematkan:

f, ok := reflect.TypeOf(User{}).FieldByName("Name")
if ok { fmt.Println(f.Tag.Get("json")) }

Bidang struct yang disematkan

Untuk struct yang disematkan, Anonymous bernilai true. Gunakan Type.FieldByIndex([]int{0,1}) untuk mengakses bidang bertingkat.

Bidang yang tidak diekspor

Bidang yang tidak diekspor (huruf kecil) dapat diperiksa tipe dan penandanya, tetapi nilainya tidak dapat dibaca atau ditetapkan melalui refleksi — panic akan terjadi.

Membangun cache bidang

Menguraikan penanda struct pada setiap panggilan membutuhkan banyak biaya. Simpan hasilnya dalam sync.Map dengan kunci reflect.Type:

var fieldCache sync.Map
func getFields(t reflect.Type) []fieldInfo {
    if v, ok := fieldCache.Load(t); ok { return v.([]fieldInfo) }
    fields := parseFields(t)
    fieldCache.Store(t, fields)
    return fields
}

Kasus penggunaan: ORM sederhana

Telusuri semua bidang dengan penanda "db" untuk membangun daftar kolom INSERT secara dinamis:

t := reflect.TypeOf(u)
v := reflect.ValueOf(u)
for i := 0; i < t.NumField(); i++ {
    col := t.Field(i).Tag.Get("db")
    val := v.Field(i).Interface()
    // build query...
}

Kasus penggunaan: pemuat konfigurasi

Telusuri bidang struct dengan penanda "env" dan isi dari variabel lingkungan:

if env := f.Tag.Get("env"); env != "" {
    if val := os.Getenv(env); val != "" {
        v.Field(i).SetString(val)
    }
}

StructTag.Lookup

Tag.Lookup("key") mengembalikan nilai penanda dan boolean yang menunjukkan apakah kunci tersebut memang ada (berbeda dari Get, yang mengembalikan "" untuk kunci yang tidak ada).

val, ok := f.Tag.Lookup("json")
if !ok { /* no json tag */ }

Pemeriksaan Singkat

Bagaimana cara membaca nilai penanda struct "json" dari reflect.StructField?

Ringkasan: Bidang dan Penanda Struct

Poin-poin penting:

  • reflect.TypeOf → .NumField(), .Field(i) untuk metadata bidang
  • StructField.Tag.Get("key") untuk membaca nilai penanda
  • Simpan metadata bidang dalam sync.Map untuk menghindari penguraian berulang
  • Gunakan Tag.Lookup ketika perbedaan antara penanda yang tidak ada dan string kosong penting

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memeriksa Field dan Tag Struct” gratis?

Ya — teks lengkap “Memeriksa Field dan Tag Struct” 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 “Memeriksa Field dan Tag Struct”?

Melakukan iterasi pada field dan membaca tag struct 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 2 dari 4.

Berapa lama pelajaran “Memeriksa Field dan Tag Struct” 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. reflect.Type dan reflect.Value
  2. Memeriksa Field dan Tag Struct
  3. Pemanggilan Fungsi Dinamis
  4. Refleksi Praktis: Serializer
← Kembali ke Go Academy