我正在编写一种框架,我想将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函数中定义处理程序。例如:
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命令找不到内部包中定义的主要函数。
发布于 2015-03-01 18:40:26
main函数必须位于main包中:程序执行
程序执行首先初始化主包,然后调用函数main。当该函数调用返回时,程序将退出。它不会等待其他的(非主要的)峡谷完成。
如果您想要一个包在启动时初始化某个状态,或者只需要导入它就会产生副作用,那么您可以使用init function。但是init必须返回,所以不能用它阻止http.ListenAndServe。
https://stackoverflow.com/questions/28797007
复制相似问题