我有非常简单的代码,我的 .go 文件:func init() {http.HandleFunc("/", handlerMain)log.Println("init executed")}func handlerMain(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "TEST")}和 app.yaml:application: newsboardversion: 1runtime: goapi_version: go1 handlers:- url: /.* script: _go_app最初执行时一切正常,这是控制台的输出INFO 2015-10-19 19:28:56,626 devappserver2.py:763] Skipping SDK update check.INFO 2015-10-19 19:28:56,652 api_server.py:205] Starting API server at: http://localhost:56946INFO 2015-10-19 19:28:56,655 dispatcher.py:197] Starting module "default" running at: http://localhost:8080INFO 2015-10-19 19:28:56,658 admin_server.py:116] Starting admin server at: http://localhost:80002015/10/19 19:28:59 init executed但是当我输入http://localhost:8080 时,我得到以下信息:INFO 2015-10-19 19:32:16,394 module.py:786] default: "GET / HTTP/1.1" 200 42015/10/19 19:32:16 init executed所以 init() 不知何故被执行了两次。然后,每次当我重新加载页面时一切正常,控制台中不再出现“初始化执行”。我的问题:为什么 init() 发生两次,这可以吗?
1 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
完全没问题。
Go AppEngine SDK 监视应用程序的代码库,并且每当它检测到更改(例如,您修改了.go
源文件)时,它都会自动重新加载您的应用程序。这包括/涉及卸载您的代码并重新加载它 -init()
再次运行功能。
基本上控制何时重新加载应用程序 - 因此执行init()
功能 - 在 SDK 的“手中”。尝试修改.go
文件并在浏览器中点击刷新:您将体验另一个init()
功能执行。
当你第一次启动你的应用程序时,所有的代码都被加载/编译(并且init()
函数被执行)——这需要完成以便报告是否有错误。之后,SDK 可能会卸载它(不确定 - 找不到相关文档),并且只有在确实发生请求(可能很快也可能不会很快到来)时才再次加载它。
- 1 回答
- 0 关注
- 170 浏览
添加回答
举报
0/150
提交
取消