반영: FieldByName의 포인터 오류 해결
제공된 코드에서 "Family"의 "마지막" 필드에 액세스하려고 시도합니다. " 리플렉션을 사용하는 구조체입니다. 그러나 "family" 필드는 포인터이며 "FieldByName"을 사용하여 해당 "마지막" 필드에 직접 액세스하면 오류가 발생합니다.
reflect: call of reflect.Value.FieldByName on ptr Value
이 문제를 해결하려면 먼저 포인터를 역참조하여 액세스해야 합니다. 구조체의 실제 값. 이는 "reflect" 패키지의 "Indirect" 기능을 사용하여 달성할 수 있습니다.
수정된 코드는 다음과 같습니다.
familyPtr := v.FieldByName("family") v = reflect.Indirect(familyPtr).FieldByName("last")
이 코드에서는 먼저 다음의 Reflect.Value를 검색합니다. "FieldByName"을 사용하는 "패밀리" 필드입니다. 그런 다음 "간접"을 사용하여 포인터를 역참조하고 "Family" 구조체의 실제 값을 얻습니다. 마지막으로, 역참조된 값의 "FieldByName"을 사용하여 "마지막" 필드에 액세스할 수 있습니다.
이 접근 방식을 따르면 다음을 통해 액세스할 때에도 "Family" 구조체의 "마지막" 필드에 액세스할 수 있습니다. 포인터 참조.
위 내용은 Go에서 리플렉션을 사용하여 포인터를 통해 구조체의 필드에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!