Go에서 Reflect.ValueOf()와 Value.Elem()의 차이점 이해
Reflection은 Go에서 다음을 수행하는 강력한 기술입니다. 런타임에 데이터 구조를 검사하고 조작할 수 있습니다. 리플렉션의 두 가지 핵심 함수는 Reflect.ValueOf()와 Value.Elem()입니다. 하지만 초보자에게는 혼란스러울 수 있습니다.
reflect.ValueOf()
reflect.ValueOf()는 모든 유형의 값을 가져와서 반환하는 함수입니다. Reflect.Value 해당 값을 나타냅니다. Reflect.Value에는 값의 유형, 크기 및 기타 속성에 대한 정보가 포함되어 있습니다.
Value.Elem()
Value.Elem()은 메서드입니다. 현재 Reflect.Value 내에 포함된 값이나 포인터를 반환하는 Reflect.Value에 대해 설명합니다. 일반적으로 다음과 같은 목적으로 사용됩니다.
Usage
다음 예에서는 두 함수의 사용법을 보여줍니다.
func main() { var i int = 3 var p *int = &i // Get a reflect.Value from an int iv := reflect.ValueOf(i) // Get a reflect.Value from a pointer to int pv := reflect.ValueOf(p) // Retrieve the dereferenced value of the pointer pv_d := pv.Elem() fmt.Println(iv.Type(), pv.Type(), pv_d.Type()) // Output: int *int int }
이 예에서 iv는 Reflect.Value는 정수 값 3을 직접 나타내는 반면, pv는 정수에 대한 포인터를 나타내는 Reflect.Value입니다. 이 컨텍스트에서 Elem() 메서드는 포인터의 역참조된 값을 나타내는 Reflect.Value를 반환합니다. 이는 기본적으로 iv와 동일합니다.
.Elem()
다음 상황에서는 Value.Elem()을 사용하세요.위 내용은 Go Reflection: 언제 `Value.Elem()`을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!