我有代码
var t reflect.Type = LaunchController(route.controller)
// create controller ptr .
var appControllerPtr reflect.Value = reflect.New(t)
fmt.Println(appControllerPtr) //#=> <**controller.AppController Value>
var appController reflect.Value = appControllerPtr.Elem()
// Create and configure base controller
var c *Controller = &Controller{
Request: r,
Writer: w,
Name: t.Name(),
}
//this should assign *goninja.Controller field in application controllers
var controllerField reflect.Value = reflect.ValueOf(appController).Field(0)
controllerField.Elem().Set(reflect.ValueOf(c))
这会创建指向元素的指针,然后尝试将值赋入此结构的0字段。
我的结构,我试图反映看起来像
type AppController struct {
*goninja.Controller
}
但是,当我尝试使用代码
分配此字段时controllerField.Elem().Set(reflect.ValueOf(c))
我正面临以下错误
reflect: reflect.Value.Set using value obtained using unexported field
我做错了什么?此外,我无法理解为什么我的reflect.New(t)
会在reflect.Value
**
答案 0 :(得分:2)
你没有提供完整的代码,所以我不得不猜一下,但我怀疑Controller
结构的AppController
字段有一个小写的名字。对?以下是我尝试从您的代码中生成一个最小示例:working(带大写字段名称)和non-working(带小写字段名称)。
另外:在您撰写reflect.ValueOf(appController).Field(0)
的位置,appController
已经是reflect.Value
类型,因此不需要ValueOf
。您可以像我上面链接的示例代码一样编写appController.Field(0)
。