reflect
패키지를 사용하여 구조체 필드로 작업하는 데 어려움을 겪고 있습니다. 특히 필드 값을 설정하는 방법을 찾지 못했습니다.
유형 t struct {fi int; fs 문자열} var rt = t {123, "jblow"} var i64 int64 = 456
필드 i의 이름 가져 오기-작동하는 것 같습니다.
var field = reflect.TypeOf(r).Field(i).Name
필드 i의 값을 a) 인터페이스 {}, b) int-작동하는 것 같습니다.
var iface interface{} = reflect.ValueOf(r).Field(i).Interface()
var i int = int(reflect.ValueOf(r).Field(i).Int())
필드 i의 값 설정-시도해보기-패닉
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : 반출되지 않은 필드를 사용하여 얻은 값을 사용하여 reflect.Value · SetInt
필드 이름 "id"및 "name"이 마음에 들지 않는다고 가정하여 "Id"및 "Name"으로 이름이 변경되었습니다.
a)이 가정이 맞습니까?
b) 맞다면 같은 파일 / 패키지에서 필요하지 않다고 생각했습니다.
필드 i의 설정 값-두 번 시도 (필드 이름이 대문자로 표시됨)-패닉
reflect.ValueOf(r).Field(i).SetInt( 465 )
reflect.ValueOf(r).Field(i).SetInt( i64 )
panic : 주소를 지정할 수없는 값을 사용하는 reflect.Value · SetInt
@peterSO의 아래 지침은 철저하고 고품질입니다.
네. 이것은 작동합니다 :
reflect.ValueOf(&r).Elem().Field(i).SetInt( i64 )
그는 필드 이름을 내보낼 수 있어야한다고 문서화합니다 (대문자로 시작).
reflect
데이터를 설정하는 데 사용할 수있는 가장 가까운 예 는 comments.gmane.org/gmane.comp.lang.go.general/35045 였지만 그곳에서도json.Unmarshal
실제 더러운 작업을했습니다