Официальная документация Go для пакета хранилища данных (клиентская библиотека для службы хранилища данных GCP) содержит следующий фрагмент кода для демонстрации:
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 и не могу найти какие-либо онлайн-ресурсы которые очень хорошо объясняют что-то подобное, с примерами из реальной жизни и примерами лучших практик.