0
に値を変換私は構造体
type pathObject struct {
s *gizmo.Session
finals bool
path *path.Path
}
を次のように私はこの構造体を取得していると私はパスオブジェクトを抽出する必要がありますが、私はここでコンパイルエラーに
を取得しておくされた構造体を持っています変換のための私のコードは
r := reflect.ValueOf(v)
for i := 0; i < val.NumField(); i++ {
valueField := val.Field(i)
typeField := val.Type().Field(i)
val.Interface()
if typeField.Name == "path" {
log.Printf("typeName %v\n", typeField.Name)
log.Printf("value %v\n", valueField)
f := reflect.Indirect(r).FieldByName("path")
log.Printf("CanInterface %v\n", valueField.Elem())
p := valueField.Elem().(path.Path)
//patObject := reflect.Indirect(valueField).FieldByName("path")
}
//f := valueField.Interface()
//val := reflect.ValueOf(f)
//slog.Printf("default %v\n", val)
}
私は、この行に pはcompiltionエラーを取得:。= valueField.Elem()(path.Pathは)
を言ってinvalid type assertion: valueField.Elem().(path.Path) (non-interface type reflect.Value on left)
エラーを回避して変換する手がかりはありますか?
:
は、このシンプルなコードを試してみてください。エラーが示すように
パスフィールドの値にアクセスするためにエクスポートする必要があります、 'Elem()'は 'reflect.Value'を返します。これは値の' reflect' *表現*です。*値ではありません。自体。 'reflect.Value'に' Interface() 'を呼び出すことで、値自体(' interface {} 'とタイプされています)を得ることができます。 – Adrian
これは正常に動作します。私がそれをキャストしようとすると、キャストは失敗します。その理由は、エクスポートできないタイプがあるので、それをどのように処理できるかを理解する必要があります。ご協力いただきありがとうございます – allthenutsandbolts