れるが、 goroutine 数 =< maxOustandingMessages となって goroutine (worker) が増え過ぎる ことがない func (w *Worker) Run(ctx context.Context) error { var err error err = w.subscriber.Receive(ctx, func(ctx context.Context, m *pubsub.Message) { err := w.processJob(m) if err != nil { m.Nack() return } m.Ack() }) if err != nil && !errors.Is(err, context.Canceled) { return fmt.Errorf("unexpected error: %w", err) } else { log.Println("subscriber.Receive exited by context.Canceled") } return nil } Pub/Sub Client(Subscriber) を使用した Worker Pool 実装 (Go) 11