Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `reflect.Value.FieldByName` panik apabila dipanggil pada nilai penunjuk?

Mengapakah `reflect.Value.FieldByName` panik apabila dipanggil pada nilai penunjuk?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 22:00:31463semak imbas

Why does `reflect.Value.FieldByName` panic when called on a pointer value?

Reflect.Value.FieldByName Menyebabkan Panik

Kaedah .FieldByName bagi nilai yang dicerminkan menjana panik apabila dipanggil pada Nilai penunjuk. Mesej ralat, "reflect: call of reflect.Value.FieldByName on ptr Value," dilemparkan apabila nilai yang diberikan ialah penunjuk kepada struct dan bukannya struct itu sendiri.

Dalam kod yang disediakan, baris "s := reflect.ValueOf(&value).Elem()" mencipta penunjuk kepada struct nilai dan kemudian menyahrujuknya menggunakan Elem(), yang tidak diperlukan. Sebaliknya, untuk mengakses dan mengubah suai medan struct, gunakan "s := reflect.ValueOf(value).Elem()".

Coretan kod yang diperbetulkan berikut menghapuskan panik:

s := reflect.ValueOf(value).Elem()
metric := s.FieldByName(subval.Metric).Interface()
fmt.Println(metric)

Dengan mencerminkan secara langsung nilai struct dan bukannya mencipta penunjuk yang tidak perlu, anda boleh mengakses dan memanipulasi medannya dengan betul tanpa mengalami panik.

Atas ialah kandungan terperinci Mengapakah `reflect.Value.FieldByName` panik apabila dipanggil pada nilai penunjuk?. 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