首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建一个具有外部主功能的程序?

如何构建一个具有外部主功能的程序?
EN

Stack Overflow用户
提问于 2015-03-01 17:57:53
回答 1查看 1.9K关注 0票数 2

我正在编写一种框架,我想将http服务器的初始化作为该框架的一部分。基本上,我有一个包internal,如下所示,它是由框架中间件导入的:

代码语言:javascript
复制
package internal

import(
    "net/http"
    "log"
)

func main() {
    checkHealth(http.DefaultServeMux)

    if err := http.ListenAndServe(":8080", http.HandlerFunc(handleHTTP)); err != nil {
        log.Fatalf("http.ListenAndServe: %v", err)
    }
}

在应用程序代码中,我希望在init函数中定义处理程序。例如:

代码语言:javascript
复制
func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}

但是,如果我在应用程序代码目录/包中运行go build,它会错误地指出主函数没有定义:runtime.main_main: main.main: not defined runtime.main_main: undefined: main.main,所以我的问题是如何构建/编译程序,以及为什么使用标准的go build命令找不到内部包中定义的主要函数。

EN

回答 1

Stack Overflow用户

发布于 2015-03-01 18:40:26

main函数必须位于main包中:程序执行

程序执行首先初始化主包,然后调用函数main。当该函数调用返回时,程序将退出。它不会等待其他的(非主要的)峡谷完成。

如果您想要一个包在启动时初始化某个状态,或者只需要导入它就会产生副作用,那么您可以使用init function。但是init必须返回,所以不能用它阻止http.ListenAndServe

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28797007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档