>  기사  >  백엔드 개발  >  Go에서 Reflect.Type과 Reflect.Value의 차이점은 무엇입니까?

Go에서 Reflect.Type과 Reflect.Value의 차이점은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-29 18:22:44743검색

 What's the Difference Between reflect.Type and reflect.Value in Go?

Go의 반사 유형 및 값

질문:

다음 Go 코드 조각에서:

<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>

리플렉션에서 유형과 값의 차이점은 무엇입니까?

답변:

Go에서 리플렉션은 두 가지 기본 구성인 Reflect.Type과 Reflect를 제공합니다. .값. 이러한 유형을 사용하면 런타임 시 데이터를 검사하고 조작할 수 있습니다.

  • reflect.Type: 이름, 기본 유형, 구조체 필드와 같은 값의 유형 정보를 나타냅니다. . 동일한 유형의 모든 변수에 연결된 정보를 쿼리할 수 있습니다.
  • reflect.Value: 개별 값을 나타내며 해당 데이터와 상호 작용할 수 있습니다. 이를 사용하여 값을 설정 및 검색하고, 유형 간에 변환하고, 기본 데이터에 대해 다른 작업을 수행할 수 있습니다.

제공된 코드 조각에서:

  • t := Reflect.TypeOf(i)는 show 함수에 전달된 값의 유형을 나타내는 Reflect.Type을 반환합니다.
  • v := Reflect.ValueOf(i)는 전달된 실제 값을 나타내는 Reflect.Value를 반환합니다.

유형 및 값에 대한 정보에 액세스하려면 다음 메서드를 사용할 수 있습니다.

  • t.Elem(): 다음의 Reflect.Type을 반환합니다. 유형이 포인터인 경우 기본 요소입니다.
  • t.Field(0).Tag: 유형의 첫 번째 필드와 연결된 태그를 반환합니다.
  • v.Elem(): 반환 값이 포인터인 경우 기본 요소의 Reflect.Value.
  • v.Field(0).String() : 값의 첫 번째 필드에 있는 데이터를 문자열로 변환합니다.

위 내용은 Go에서 Reflect.Type과 Reflect.Value의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.