Reflection 使用reflect.Set设置字段

Reflection 使用reflect.Set设置字段,reflection,go,Reflection,Go,我有密码 var t reflect.Type = LaunchController(route.controller) // create controller ptr . var appControllerPtr reflect.Value = reflect.New(t) fmt.Println(appControllerPtr) //#=> <**controller.AppController Value> var appContro

我有密码

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))
但是,当我试图用代码分配此字段时

controllerField.Elem().Set(reflect.ValueOf(c))
我面临以下错误

reflect: reflect.Value.Set using value obtained using unexported field

我做错了什么?我也不明白为什么我的
reflect.New(t)
返回
reflect.Value
,开头有两个星号
**
您没有给出完整的代码,所以我不得不猜测一下,但我怀疑
AppController
结构的
Controller
字段的大小写名称较低。对吗?下面是我尝试从代码中生成的一个最小示例:(使用大写字段名)和(使用小写字段名)


另外:在写入
reflect.ValueOf(appController).Field(0)
时,
appController
的类型已经是
reflect.Value
,因此不需要
ValueOf
。您只需编写
appController.Field(0)
,就像我上面链接的示例代码一样。

我的结构appController的Controller字段就是嵌入字段。我已经检查了是否有未移植的字段,但没有可用的字段。还有一个原因是我做了2倍于ValueOf的操作-否则我会出现错误
reflect:ptr Value上reflect.Value.FieldByName的调用
。更新了带有注释的代码。您能否提供显示错误消息的完整代码(例如,在play.golang.org上)?由于我没有几个不同的模块,不确定如何才能做到这一点
reflect: reflect.Value.Set using value obtained using unexported field