Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `reflect.Value.FieldByName` panik apabila dipanggil pada nilai penunjuk?
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!