数据存储包(GCP 数据存储服务的客户端库)的官方 Go 文档具有以下演示代码片段:
type Entity struct {
Value string
}
func main() {
ctx := context.Background()
// Create a datastore client. In a typical application, you would create
// a single client which is reused for every datastore operation.
dsClient, err := datastore.NewClient(ctx, "my-project")
if err != nil {
// Handle error.
}
k := datastore.NameKey("Entity", "stringID", nil)
e := new(Entity)
if err := dsClient.Get(ctx, k, e); err != nil {
// Handle error.
}
old := e.Value
e.Value = "Hello World!"
if _, err := dsClient.Put(ctx, k, e); err != nil {
// Handle error.
}
fmt.Printf("Updated value from %q to %q\n", old, e.Value)
}
正如所见,它指出datastore.Client理想情况下应该只在应用程序中实例化一次。现在鉴于该datastore.NewClient函数需要一个context.Context对象,这是否意味着它应该只在每个 HTTP 请求中实例化一次,还是可以安全地用一个context.Background()对象在全局范围内实例化一次?
每个操作都需要一个context.Context对象(例如dsClient.Get(ctx, k, e)),那么应该使用 HTTP 请求的上下文吗?
我是 Go 新手,真的找不到任何在线资源可以很好地用真实世界的例子和实际的最佳实践模式来解释这样的事情。
慕码人8056858
相关分类