Rumah >pembangunan bahagian belakang >Golang >Apakah Perbezaan Antara reflect.Type dan reflect.Value in Go?

Apakah Perbezaan Antara reflect.Type dan reflect.Value in Go?

Susan Sarandon
Susan Sarandonasal
2024-10-29 18:22:44795semak imbas

 What's the Difference Between reflect.Type and reflect.Value in Go?

Jenis Refleksi dan Nilai dalam Go

Soalan:

Dalam coretan kod Go berikut:

<code class="go">func show(i interface{}) {
    switch t := i.(type) {
    case *Person:
        t := reflect.TypeOf(i)  //what does t contain?   
        v := reflect.ValueOf(i)  //what does v contain?
        tag := t.Elem().Field(0).Tag
        name := v.Elem().Field(0).String() 
    }
}</code>

Apakah perbezaan antara jenis dan nilai dalam pantulan?

Jawapan:

Dalam Go, pantulan menyediakan dua binaan utama: reflect.Type and reflect .Nilai. Jenis ini membolehkan anda mengintrospeksi dan memanipulasi data pada masa jalan.

  • reflect.Type: Mewakili maklumat jenis sesuatu nilai, seperti namanya, jenis asas dan medan struct . Ia membolehkan anda menanyakan maklumat yang terikat kepada semua pembolehubah dengan jenis yang sama.
  • reflect.Value: Mewakili nilai individu dan membolehkan anda berinteraksi dengan datanya. Anda boleh menggunakannya untuk menetapkan dan mendapatkan nilai, menukar antara jenis dan melaksanakan operasi lain pada data asas.

Dalam coretan kod yang disediakan:

  • t := reflect.TypeOf(i) mengembalikan reflect.Type yang mewakili jenis nilai yang dihantar ke fungsi show.
  • v := reflect.ValueOf(i) mengembalikan reflect.Value yang mewakili nilai sebenar yang diluluskan kepada fungsi.

Untuk mengakses maklumat tentang jenis dan nilai, anda boleh menggunakan kaedah berikut:

  • t.Elem(): Mengembalikan pantulan.Jenis elemen asas jika jenisnya ialah penunjuk.
  • t.Field(0).Tag: Mengembalikan teg yang dikaitkan dengan medan pertama jenis.
  • v.Elem(): Mengembalikan the reflect.Nilai elemen asas jika nilai ialah penunjuk.
  • v.Field(0).String() : Menukarkan data dalam medan pertama nilai kepada rentetan.

Atas ialah kandungan terperinci Apakah Perbezaan Antara reflect.Type dan reflect.Value in Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn