初始化和销毁​​功能

时间:2017-10-11 07:18:53

标签: google-app-engine go

我仍然是Google Cloud Appengine(标准版)中golang的初学者。 我想使用一个自动调用实例关闭的函数。 在启动期间调用了一个函数init。 现在我正在寻找像破坏功能相反的部分。 似乎有类似python的东西,但找不到 golang的任何事情。

你怎么能在google appengine实例中实现这样的破坏功能呢?

1 个答案:

答案 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秒的关闭时间。因此,我们建议您定期检查实例的状态,并将其主要用作内存缓存而不是可靠的数据存储。