Go의 유형, 값 및 리플렉션 이해
Go에서 리플렉션은 런타임에 코드를 검사하고 조작하는 메커니즘을 제공합니다. 이는 두 가지 기본 유형인 Reflect.Type과 Reflect.Value를 제공하며, 각각은 프로그램 요소와 상호 작용하는 서로 다른 기능을 제공합니다.
다음 코드 조각을 고려하세요.
<code class="go">func show(i interface{}) { switch t := i.(type) { case *Person: t := reflect.TypeOf(i) // What does 't' contain? v := reflect.ValueOf(i) // What does 'v' contain? tag := t.Elem().Field(0).Tag name := v.Elem().Field(0).String() } }</code>
차이점 Reflection의 유형 및 값
reflect.Type:
reflect.Value:
사용 예
제공된 코드 조각에서 스위치 문은 i가 "*Person"의 인스턴스인지 확인합니다. 그렇다면 Reflect.TypeOf(i)는 Person 구조체의 유형을 반환하여 해당 필드 태그(예: t.Elem().Field(0).Tag`)에 대한 액세스를 허용합니다.
한편, Reflect.ValueOf(i)는 Person 인스턴스에 대해 *reflect.Value를 반환합니다. v.Elem().Field(0).String()을 호출하면 인스턴스의 특정 유형에 관계없이 첫 번째 필드 값의 문자열 표현을 검색할 수 있습니다.
위 내용은 Go 리플렉션에서 `reflect.Type`과 `reflect.Value`는 어떻게 다르며 런타임 시 프로그램 요소에 대해 어떤 통찰력을 제공합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!