Go:反射 catch22 反射包

好的.. 我有,或者正在写一个 web 框架包,叫做 mao。


我想在控制器中定义我的路由。


在毛


type (

    Controller struct {

        Route Route

    }

    Route struct {

        Name, Host, Path, Method string

    }

)

在 mao 导入包中


控制器/default.go


type DefaultController struct {

    mao.Controller

}

func (this *DefaultController) Index() Response {

    this.Route = mao.Route{"default_index","localhost","/", "GET"}

}

现在,由于我想在控制器内定义我的路由,路由器在实例化时应该读取所有控制器。那就是问题所在。


如何将包名称传递给我的路由器,以便它能够获取该包中的所有结构和函数?甚至有可能吗?


慕村9548890
浏览 191回答 3
3回答

Qyouu

老实说,我认为你这样做是错误的。“自动注册”混淆了发生的事情,并且会导致代码难以测试和推理。我建议让控制器成为具体控制器应该满足的接口,并Add(c Controller)在路由器上有一个方法来在调用主项目(导入路由器和控制器)中分配控制器。这应该使您的代码易于理解和明确,并且更符合 go 的精神。该database/sql驱动程序注册更多的是黑客的,不应该被认为是最佳做法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go