Dalam bidang pengaturcaraan Go, fungsi mencerminkan.ValueOf() dan kaedah Value.Elem() memainkan peranan yang berbeza dalam menerokai selok-belok refleksi. Mari kita mendalami perbezaan mereka dan aplikasi mereka.
reflect.ValueOf() berfungsi sebagai pintu masuk ke dunia reflektif dalam Go. Ia memerlukan nilai biasa, seperti integer atau rentetan, dan mengembalikan deskriptor Nilai yang mewakili nilai tersebut. Deskriptor ini menyediakan pemegang untuk memeriksa dan memanipulasi nilai asas secara berstruktur.
Value.Elem() ialah kaedah yang tersedia secara eksklusif untuk mencerminkan. Contoh nilai. Ia mendapatkan semula nilai yang tertanam dalam antara muka atau nilai yang ditunjuk oleh penunjuk. Dengan menanggalkan lapisan perantara, ia memberikan akses kepada konkrit, nilai asas.
Pertimbangkan coretan kod berikut:
var i int = 3 var p *int = &i
Jika kita menggunakan refleksi. ValueOf() ke penunjuk ini:
v := reflect.ValueOf(p)
Kami mendapatkan semula mencerminkan.Penerangan nilai yang mewakili penunjuk itu sendiri (v). Untuk mengakses nilai yang ditunjukkan oleh penuding kepada (3), kami memanggil v.Elem():
v2 := v.Elem()
Akhir sekali, untuk menukar pantulan ini. Nilai kembali kepada nilai biasa, kami menggunakan Antaramuka():
value := v2.Interface().(int) // Type assertion required
Selain membongkar nilai di sebalik penunjuk dan antara muka, Value.Elem() mempunyai kes penggunaan tambahan yang kurang biasa. Apabila menghantar penuding ke antara muka, ia mendapatkan semula nilai antara muka yang dibalut di bawah penuding antara muka. Panggilan seterusnya kepada Value.Elem() akan mendedahkan nilai konkrit yang disimpan dalam antara muka itu.
Sebagai peraturan biasa:
Atas ialah kandungan terperinci Apakah Perbezaan Antara `reflect.ValueOf()` dan `Value.Elem()` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!