如何在Golang Google Datastore包中正确使用上下文?

时间:2018-01-01 10:32:18

标签: go google-cloud-datastore

我已经开始在我目前工作的公司的一个项目中使用Google Cloud Datastore。

https://godoc.org/cloud.google.com/go/datastore

在提供的示例中,他们使用上下文并将其传递给连接实例

ctx := context.Background()
dsClient, err := datastore.NewClient(ctx, "my-project")

通过文档,您将看到它们将上下文传递给在数据库上进行操作的所有函数,我不确定它们是否传递相同的指针或为每个操作创建一个新指针。

我拥有的当前设置是一个名为" store"的包中的上下文的全局变量。我保留了与db通信的所有结构函数,每次都使用该全局变量。我不知道这会产生什么影响,我不确定为什么使用上下文,每次我在数据库上进行操作时都应该引用context.Background()吗?

1 个答案:

答案 0 :(得分:2)

context.Background是全局上下文 - 因此不需要全局变量。大多数情况下,您希望使用该上下文的子项,取消或超时。

ctx, cancel := context.WithCancel(context.Background)
//or
ctx, cancel := context.WithTimeout(context.Background, time.Second * 30) 

然后您可以使用取消功能很好地关闭您的应用程序,或者如果请求挂起则取消并重试。如果您从未计划取消或超时操作,那么使用context.Background就可以了。

context.Context也是一个接口,因此它总是通过引用传递,因此某个实例的所有使用都指向同一个上下文。