我仍然是Google Cloud Appengine(标准版)中golang的初学者。 我想使用一个自动调用实例关闭的函数。 在启动期间调用了一个函数init。 现在我正在寻找像破坏功能相反的部分。 似乎有类似python的东西,但找不到 golang的任何事情。
你怎么能在google appengine实例中实现这样的破坏功能呢?
答案 0 :(得分:2)
这是Go - How Instances are Managed记录的。
不幸的是Go文档不完整,这里是Pyton版本的链接:Python - How Instances are Managed。它的实现/支持方式与语言无关。
当实例启动时,会向/_ah/start
路径发送HTTP GET请求。
在取消实例之前,会向/_ah/stop
路径发送HTTP GET请求。
您应该使用package init()
functions进行初始化,因为它始终运行,并且只运行一次。如果init函数需要请求,则将处理程序注册到_/ah/start
路径。
您可以向/_ah/stop
注册处理程序并实施" shutdown"像这样的功能:
func init() {
http.HandleFunc("/_ah/stop", shutdownHandler)
}
func shutdownHandler(w http.ResponseWriter, r *http.Request) {
doSomeWork()
saveState()
}
但你不能依靠这100%:
注意:确认在实例终止之前并不总是能够运行关闭挂钩很重要。在极少数情况下,可能会发生中断,导致App Engine无法提供30秒的关闭时间。因此,我们建议您定期检查实例的状态,并将其主要用作内存缓存而不是可靠的数据存储。