go - 通过字符串创建一个结构的实例

标签 go

我正在构建一个应用程序,我想在其中使用一个简单的 mvc 模型

我有一个包 Controller ,里面有这样的 Controller 结构

type UserController struct {}

func (u *UserController) Index(res http.ResponseWriter, req http.Request) {
  // some code in it
}

我想要实现的是,我可以通过类似字符串的方式创建该 Controller 的实例

func NewAppController("user") { }

所以我可以通过我的路由请求动态创建我的 Controller 实例

我想到的另一种方法是像这样映射我的 Controller

var controllerProvider = map[string]interface{} {
   "user": &controllers.UserController{},
   "warehouse": &controllers.WarehouseController{},
 }

然后调用它

appController = mux.Vars(req)["controller"]
c := controllerProvider[appController]

但我宁愿使用第一种方式知道如何处理这个吗?

最佳答案

您可以尝试创建一个新对象来实现 reflect.Type接口(interface),然后通过reflect的机制来使用它,但这看起来完全是在浪费时间。相反,请考虑以下替代方案:

  • 使用 Name stringMethods map[string]ActionFunc 等字段创建结构。这会起作用,但对我来说它看起来不是很惯用。 (如果有的话,这让人想起一些 JavaScript OOP 实现。)

  • 使用框架。如果您对 MVC 感到满意,为什么不使用已经存在的 Go 的 MVC 框架之一?我想到了 Beego 和 Revel。

  • 彻底重新思考您的架构。据我现在所见,您正在尝试将 Go 编写为 Ruby-on-Rails。去是不同的。从 vanilla net/http 开始,为您的应用创建一个最小实现。那是你的原型(prototype)。有了这个原型(prototype),您就可以重写和扩展它。想要足智多谋的路线?添加 gorilla/mux 或其他选择的路由器。需要数据存储?添加一个 ORM。想要更多的可测试性和灵 active ?接口(interface),接口(interface)无处不在。

关于go - 通过字符串创建一个结构的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775603/

相关文章:

go - 从编译的二进制文件中获取 golang 版本

pointers - 可以将结构指针方法中的指针重新分配给另一个实例吗?

firebase - 如何验证JWT?

go - 使用不同级别的接口(interface)

Golang 中的 map 集

json - 如何解码其中包含不同类型值的 json 数组

arrays - 如何将json对象的json数组合并到单个json对象

go - 安装 gorp (GO) 时遇到问题

arrays - 将 float64 数组转换为 float32 数组

go client watch etcd 事件失败