【发布时间】:2014-03-07 04:19:07
【问题描述】:
好的.. 我有,或者正在编写一个名为 mao 的 web 框架包。
我想在控制器中定义我的路线。
在毛
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"}
}
现在我想在控制器中定义我的路由,路由器在实例化时应该读取所有控制器。这就是问题所在。
如何将包名称传递给我的路由器,以便它能够获取该包中的所有结构和函数?有可能吗?
【问题讨论】:
-
我认为这是重复的:stackoverflow.com/questions/20803758/…(答案是“不,不可能”)
-
我不太确定这不可能。我偶然发现godoc.org/code.google.com/p/go.tools/go/types 另一种方法可能是给每个控制器一个 Reflect() 方法,另一种方法是在控制器内部没有路由并使用 Controller reflect.Type 作为 Route 属性。我不喜欢“不可能”,一切皆有可能,这只是是否值得权衡的问题。我想我会用golang-nuts问。感谢您参考其他问题。
-
我的意思是仅仅使用包是不可能获得所有函数和结构的。显然,你可以,比如说,实现一个包含所有函数的 reflect.Type 的包级切片,或者去获取一个解析器并解析源文件,但从从包中获取信息的意义上,这是“不可能的”。不可能,因为编译中没有保留信息。
-
@Jsor 你是对的。我重新开始并采取了不同的方法,预先定义了路线。
标签: reflection go