리플렉션을 사용하여 구조체 필드 이름 검색
Go의 리플렉션 기능에서는 Reflect 패키지를 사용하여 임의의 구조체를 검사할 수 있습니다. 그러나 일반적인 질문이 발생합니다: 구조체 필드의 이름을 얻는 방법은 무엇입니까?
다음 코드를 고려하십시오.
type A struct { Foo string } func (a *A) PrintFoo() { fmt.Println("Foo value is " + a.Foo) } func main() { a := &A{Foo: "afoo"} val := reflect.Indirect(reflect.ValueOf(a)) fmt.Println(val.Field(0).Type().Name()) // Prints "string" }
이 예의 목표는 다음을 사용하여 "Foo"를 인쇄하는 것입니다. 반사. 그러나 코드는 현재 "문자열"을 인쇄합니다. 왜 이런 일이 발생합니까?
답은 Reflect 패키지의 메서드에 있습니다.
필드 이름을 얻으려면 먼저 구조체 자체에 대한 Reflect.Value입니다. 구조체에 대한 포인터를 역참조하고 Reflect.ValueOf를 사용하여 Reflect.Value를 가져오면 이 작업을 수행할 수 있습니다.
다음으로 구조체의 첫 번째 필드에 대한 Reflect.Value를 검색해야 합니다. val.Field(0)를 사용하여 이 작업을 수행할 수 있습니다.
마지막으로 val.Field(0).Type()을 사용하여 필드의 Reflect.Type을 가져올 수 있습니다. 필드 이름을 얻으려면 val.Field(0).Type().Name()을 호출하면 됩니다.
따라서 아래 수정된 코드는 "Foo"를 올바르게 인쇄합니다:
fmt.Println(val.Field(0).Type().Field(0).Name())
위 내용은 Go Reflection을 사용하여 구조체 필드의 이름을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!