> 백엔드 개발 > Golang > Go Reflection을 사용하여 구조체 필드의 이름을 검색하는 방법은 무엇입니까?

Go Reflection을 사용하여 구조체 필드의 이름을 검색하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-07 06:07:17
원래의
534명이 탐색했습니다.

How to Retrieve a Struct Field's Name Using Go Reflection?

리플렉션을 사용하여 구조체 필드 이름 검색

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.Field: 구조체의 지정된 인덱스에 있는 필드를 나타내는 Reflect.Value를 검색합니다. .
  • reflect.Value.Type: Reflect.Type을 검색합니다. Reflect.Value.
  • reflect.Type.Field: 구조체 유형의 특정 필드를 설명하는 Reflect.StructField를 검색합니다.

필드 이름을 얻으려면 먼저 구조체 자체에 대한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿