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
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
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!