Rumah > pembangunan bahagian belakang > Golang > Apakah Perbezaan Antara `reflect.ValueOf()` dan `Value.Elem()` dalam Go?

Apakah Perbezaan Antara `reflect.ValueOf()` dan `Value.Elem()` dalam Go?

Barbara Streisand
Lepaskan: 2024-12-13 17:04:10
asal
894 orang telah melayarinya

What's the Difference Between `reflect.ValueOf()` and `Value.Elem()` in Go?

Memahami Perbezaan Antara reflect.ValueOf() dan Value.Elem()

Reflect.ValueOf() berfungsi sebagai pintu masuk ke refleksi , membolehkan anda mendapatkan pemerihalan nilai refleksi untuk nilai bukan pantulan seperti rentetan atau integer.

Sebaliknya, Value.Elem() berfungsi sebagai kaedah dalam reflect.Value. Ia boleh digunakan untuk mendapatkan semula nilai (juga mencerminkan.Nilai) yang dirujuk oleh nilai yang dirangkumkan oleh mencerminkan asal.Nilai. Ambil perhatian bahawa reflect.Indirect() juga boleh digunakan untuk tujuan ini.

Untuk beralih daripada pantulan kembali kepada bukan pantulan, gunakan kaedah Value.Interface(), yang mengembalikan nilai yang dibalut sebagai antara muka yang ringkas{ }.

var i int = 3
var p *int = &i
fmt.Println(p, i) // Output: 0x414020 3

v := reflect.ValueOf(p)
fmt.Println(v.Interface()) // Output: 0x414020

v2 := v.Elem()
fmt.Println(v2.Interface()) // Output: 3
Salin selepas log masuk

Kes Penggunaan Terperinci: Value.Elem() untuk Antara muka

Jika mencerminkan.Nilai membalut nilai antara muka, Value.Elem() juga boleh mendapatkan semula nilai konkrit dalam antara muka itu.

var r io.Reader = os.Stdin

v := reflect.ValueOf(r)
fmt.Println(v.Type()) // Output: *os.File

v2 := reflect.ValueOf(&r)
fmt.Println(v2.Type()) // Output: *io.Reader
fmt.Println(v2.Elem().Type()) // Output: io.Reader
fmt.Println(v2.Elem().Elem().Type()) // Output: *os.File
Salin selepas log masuk

Atas ialah kandungan terperinci Apakah Perbezaan Antara `reflect.ValueOf()` dan `Value.Elem()` dalam 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