Go 如何构建具有外部主功能的程序?

Go 如何构建具有外部主功能的程序?,go,Go,我正在编写一种框架,我想让http服务器的初始化成为这个框架的一部分。因此,基本上我有一个包internal,如下所示,它是由框架中间件导入的: package internal import( "net/http" "log" ) func main() { checkHealth(http.DefaultServeMux) if err := http.ListenAndServe(":8080", http.HandlerFunc(handleHTTP

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

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函数中定义处理程序。 e、 g

但是,如果我在app code目录/软件包中运行
go build
,则会错误地发现主功能未定义:
runtime.main\u main:main.main:未定义
runtime.main_main:未定义:main.main

因此,我的问题是我应该如何构建/编译该程序,以及为什么使用标准的
go build
命令找不到内部包中定义的主函数。

函数必须在
main
包中:

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

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

func init() {
    http.HandleFunc("/", handler)
}

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