질문
포인터 유형 및 값을 어떻게 변경할 수 있습니까? 다음을 사용하여 인터페이스에 의해 정의된 변수 리플렉션?
답변
Go에서는 인터페이스를 포함한 모든 것이 값으로 전달됩니다. 인터페이스 값을 할당할 때 복사본이 생성되어 수정 가능성이 제한됩니다.
인터페이스 변수에 저장된 값을 수정하려면 해당 주소를 사용해야 합니다. Reflect.ValueOf(&varName).Elem()을 통해 변수의 주소에 액세스하면 변수에 새 포인터 값을 설정할 수 있습니다.
예
var a fmt.Stringer // Interface variable a = &Greeter{"John"} v := reflect.ValueOf(&a).Elem() // Access variable's address v.Set(reflect.ValueOf(&Greeter2{"Jack"})) // Set new pointer value fmt.Println(a.String()) // Hello2, My name is Jack (Greeter2.String() called)
핵심
제한 사항
위 내용은 Go에서 리플렉션을 사용하여 인터페이스 변수의 포인터 유형과 값을 어떻게 변경할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!