为了账号安全,请及时绑定邮箱和手机立即绑定

Go:反射 catch22 反射包

Go:反射 catch22 反射包

Go
慕村9548890 2021-07-28 09:00:29
好的.. 我有,或者正在写一个 web 框架包,叫做 mao。我想在控制器中定义我的路由。在毛type (    Controller struct {        Route Route    }    Route struct {        Name, Host, Path, Method string    })在 mao 导入包中控制器/default.gotype DefaultController struct {    mao.Controller}func (this *DefaultController) Index() Response {    this.Route = mao.Route{"default_index","localhost","/", "GET"}}现在,由于我想在控制器内定义我的路由,路由器在实例化时应该读取所有控制器。那就是问题所在。如何将包名称传递给我的路由器,以便它能够获取该包中的所有结构和函数?甚至有可能吗?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

老实说,我认为你这样做是错误的。“自动注册”混淆了发生的事情,并且会导致代码难以测试和推理。

我建议让控制器成为具体控制器应该满足的接口,并Add(c Controller)在路由器上有一个方法来在调用主项目(导入路由器和控制器)中分配控制器。这应该使您的代码易于理解和明确,并且更符合 go 的精神。

database/sql驱动程序注册更多的是黑客的,不应该被认为是最佳做法。


查看完整回答
反对 回复 2021-08-02
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信