我可以限制包在Golang中有一些功能吗?

时间:2017-01-29 09:17:01

标签: go interface structure

我有与功能类似的软件包,因为它们是Web请求处理程序。

我在每个包中都有这样的功能:

package home_page_handler


func GetUrl() string {
    return "/"
}

func GetPageName() string {
    return "HomePage"
}

为了更好地构造代码,我想知道我是否可以添加一个限制,可能是通过接口来制作一些" class"包含这些功能?

这样,如果我再添加一个处理程序,如果函数丢失或签名错误,它将在编译时抛出错误。

1 个答案:

答案 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)
}

除非提供GetUrlGetPageName且函数签名正确,否则包不会编译。