我有与功能类似的软件包,因为它们是Web请求处理程序。
我在每个包中都有这样的功能:
package home_page_handler
func GetUrl() string {
return "/"
}
func GetPageName() string {
return "HomePage"
}
为了更好地构造代码,我想知道我是否可以添加一个限制,可能是通过接口来制作一些" class"包含这些功能?
这样,如果我再添加一个处理程序,如果函数丢失或签名错误,它将在编译时抛出错误。
答案 0 :(得分:1)
您可以通过电话“注册”每个包
package server
type PageHandler {
url, name func() string
}
var Handlers = []PageHandler
func RegisterHandler(url func()string, name func()string) {
Handlers = append(Handlers, PageHandler{url, name})
}
...
package home_page
...
func init() {
server.RegisterHandler(GetUrl, GetPageName)
}
除非提供GetUrl
和GetPageName
且函数签名正确,否则包不会编译。