0Pricing
Go Academy · Pelajaran

reflect.Type dan reflect.Value

TypeOf, ValueOf, Kind, dan Elem

reflect.Type dan reflect.Value adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Ikhtisar paket reflect

Paket reflect memungkinkan program Go memeriksa tipe dan nilai saat runtime. Paket ini menjadi dasar pustaka pengodean, ORM, dan kerangka kerja injeksi dependensi.

reflect.TypeOf

reflect.TypeOf(x) mengembalikan reflect.Type dari nilai x:

t := reflect.TypeOf(42)
fmt.Println(t.Name())    // "int"
fmt.Println(t.Kind())    // "int"
fmt.Println(t.String())  // "int"

reflect.ValueOf

reflect.ValueOf(x) mengembalikan reflect.Value yang menyimpan x. Anda dapat membaca nilainya dengan metode khusus Kind:

v := reflect.ValueOf(42)
fmt.Println(v.Kind())    // "int"
fmt.Println(v.Int())     // 42

Type.Kind dibandingkan Type.Name

Kind adalah kategori Go yang mendasarinya (bilangan bulat, struct, penunjuk, irisan, dan sebagainya). Name adalah nama tipe yang dideklarasikan ("MyStruct"). Antarmuka memiliki Kind == Interface, tetapi tidak memiliki Name.

Bidang struct

Periksa bidang struct melalui Type.NumField() dan Type.Field(i), yang mengembalikan reflect.StructField:

t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
    f := t.Field(i)
    fmt.Printf("Field: %s Type: %s Tag: %s\n", f.Name, f.Type, f.Tag.Get("json"))
}

Membaca nilai bidang struct

Gunakan Value.FieldByName atau Value.Field(i) untuk membaca nilai bidang saat runtime:

v := reflect.ValueOf(user)
nameField := v.FieldByName("Name")
fmt.Println(nameField.String()) // "Alice"

Menetapkan nilai bidang struct

Untuk menetapkan sebuah bidang, nilainya harus dapat dialamatkan (diteruskan sebagai penunjuk):

v := reflect.ValueOf(&user).Elem()
v.FieldByName("Name").SetString("Bob")

Indireksi penunjuk

Jika suatu nilai adalah penunjuk, panggil v.Elem() untuk mendapatkan nilai yang ditunjuk. Periksa v.Kind() == reflect.Ptr terlebih dahulu.

if v.Kind() == reflect.Ptr {
    v = v.Elem()
}

reflect.New

Buat nilai nol baru dari suatu tipe dan dapatkan penunjuk ke nilai tersebut:

t := reflect.TypeOf(User{})
ptr := reflect.New(t) // *User
user := ptr.Interface().(*User)

Memanggil metode

Panggil metode berdasarkan nama pada nilai yang direfleksikan:

v := reflect.ValueOf(user)
m := v.MethodByName("Greet")
results := m.Call(nil)
fmt.Println(results[0].String())

Kinerja

Refleksi 5–10× lebih lambat daripada kode langsung. Simpan cache reflect.Type dan reflect.Value di luar loop panas. Gunakan pembuatan kode ketika kinerja sangat penting.

Pemeriksaan Singkat

Apa perbedaan antara reflect.Type.Kind() dan reflect.Type.Name()?

Ringkasan: reflect.Type dan reflect.Value

Poin-poin penting:

  • reflect.TypeOf/ValueOf untuk pemeriksaan tipe saat runtime
  • Kind: kategori yang mendasari; Name: nama yang dideklarasikan
  • Value.FieldByName + SetXxx untuk memanipulasi bidang struct
  • Teruskan penunjuk + panggil Elem() untuk nilai yang dapat ditetapkan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “reflect.Type dan reflect.Value” gratis?

Ya — teks lengkap “reflect.Type dan reflect.Value” 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 “reflect.Type dan reflect.Value”?

TypeOf, ValueOf, Kind, dan Elem 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 1 dari 4.

Berapa lama pelajaran “reflect.Type dan reflect.Value” 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