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
Lepaskan: 2024-10-29 18:22:44
asal
781 orang telah melayarinya

 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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan