Я новичок в Голанге и пытаюсь лучше понять контекст.
В приведенном ниже фрагменте мне кажется, что я создал экземпляр моего computeService
с контекстом. почему я должен передать его снова функции .Context()
при вызове Stop()
?
package main
func stopTaggedMachines(ctx context.Context, svc *compute.Service, project, zone, tag string) ([]string, error) {
var instances []string
f := func(page *compute.InstanceList) error {
for _, v := range page.Items {
if v.Labels["gcp-idler-managed"] == "true" {
result, err := svc.Instances.Stop(project, zone, v.Name).Context(ctx).Do()
if err != nil {
log.Fatal(err)
}
fmt.Printf("[INFO] gcp-machine-idler: Instance in state %v, Stopping %v... Response: %v \n", v.Status, v.Name, result.HTTPStatusCode)
}
}
return nil
}
call := svc.Instances.List("my-project", "us-west1-b")
if err := call.Pages(oauth2.NoContext, f); err != nil {
return instances, nil
}
return instances, nil
}
func main() {
// Use oauth2.NoContext if there isn't a good context to pass in.
ctx := context.Background()
computeService, err := compute.NewService(ctx)
if err != nil {
log.Fatal(err)
}
stopTaggedMachines(ctx, computeService, "my-project", "us-west1-b", "gcp-idler-managed")
return
}
Мне кажется избыточным, что я передаю ctx в compute.NewService()
, а затем снова в stopTaggedMachines()
Это действительно правильное соглашение или использование контекста? Почему мой вызов svc.Instances.Stop(project, zone, v.Name).Context(ctx).Do()
должен быть передан ctx
еще раз в качестве параметра?