【问题标题】:Can I restrict packages have some set of functions in Golang?我可以限制包在 Golang 中有一些功能吗?
【发布时间】:2017-01-29 09:17:00
【问题描述】:

我有一些功能相似的包,因为它们是 Web 请求处理程序。

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

package home_page_handler


func GetUrl() string {
    return "/"
}

func GetPageName() string {
    return "HomePage"
}

为了更好地组织代码,我想知道我是否可以添加一个限制,可能是通过接口使某些“类”的每个包都包含这些功能?

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

【问题讨论】:

  • 如果一个函数丢失并且你试图调用它,编译器会提出这个问题。如果缺少一个函数并且没有人调用它,为什么还要麻烦呢?

标签: go interface structure


【解决方案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 并且函数签名正确,否则该包不会编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多