我是 GO 语言的新手。尝试通过构建真实的 Web 应用程序来学习 GO。我正在使用 Revel 框架。这是我的资源路线:GET /resource/:resource Resource.ReadAllGET /resource/:resource/:id Resource.ReadPOST /resource/:resource Resource.CreatePUT /resource/:resource/:id Resource.UpdateDELETE /resource/:resource/:id Resource.Delete例如:GET /resource/users 电话 Resource.ReadAll("users")这是我的资源控制器(现在只是一个虚拟操作):type Resource struct { *revel.Controller}type User struct { Id int Username string Password string}type Users struct {}func (u Users) All() string { return "All"}func (c Resource) ReadAll(resource string) revel.Result { fmt.Printf("GET %s", resource) model := reflect.New(resource) fmt.Println(model.All()) return nil}我正在尝试通过将资源字符串转换为对象来调用All函数来获取用户结构的实例。和错误:不能使用资源(类型字符串)作为类型reflect.Type in参数来reflect.New:字符串没有实现reflect.Type(缺少Align方法)我是 GO 新手,请不要评判我 :)
1 回答
忽然笑
TA贡献1806条经验 获得超5个赞
你的问题在这里:
model := reflect.New(resource)
您不能以这种方式从字符串实例化类型。您需要在那里使用开关并根据型号执行操作:
switch resource {
case "users":
model := &Users{}
fmt.Println(model.All())
case "posts":
// ...
}
或者reflect正确使用。就像是:
var types = map[string]reflect.Type{
"users": reflect.TypeOf(Users{}) // Or &Users{}.
}
// ...
model := reflect.New(types[resource])
res := model.MethodByName("All").Call(nil)
fmt.Println(res)
- 1 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消