패키지를 반영 golang에 reflect.Value의 영점이 무엇인지, reflect.value.IsValid 그 의견이 있습니다는 golang에서
IsValid는 V가 값을 나타내는 지 여부를보고합니다. v가 제로의 경우는 false를 돌려줍니다. IsValid가 false를 반환하면 String 패닉을 제외한 다른 모든 메서드가 반환됩니다. 대부분의 함수와 메소드는 결코 잘못된 값을 반환하지 않습니다. 그렇다면 문서에 조건이 명시 적으로 명시되어 있습니다.
위의 내용을 읽으면 매우 혼란 스럽습니다. 나는 무엇이 0의 값을 가지고 있는지 모른다. 값과 그것을 사용하는 isValid는 false를 얻는다.
나는 테스트 코드를 작성 :
var haha *int
fmt.Println(reflect.ValueOf(haha).IsValid()) //true
var hehe interface{}
fmt.Println(reflect.ValueOf(hehe).IsValid() //false
방금 빈 인터페이스를 ValueOf로 취하는 것이 0 값을 반환한다는 예제를 제시했습니다. 너 혼란스러워? – JimB
Go의 값은 "0 값"입니다. 이것은 숫자의 경우 0, 문자열의 경우 "", 포인터의 경우 nil 등입니다. 어떤 유형. 따라서 'reflect.Value'유형은 0 값을 갖습니다 (그 값이 무엇이든). 이것이 바로 문서가 말하는 것입니다. Go에 익숙해질 때까지 패키지에서 벗어나십시오. – Volker
@Volker 제 작품에서, 저는 프로젝트를 구현하기 위해 reflection을 사용해야합니다. 반사 팩을 사용하는 것은 매우 위험하지만, 나는 배우려고합니다. 나는 golang에 익숙하지만, 공통된 개발에서 pkg을 반영하지 않는다. – LittleDriver