code: func (dg *dockerGoClient) ListContainers(ctx context.Context, all bool, timeout time.Duration) ListContainersResponse {
  	ctx, cancel := context.WithTimeout(ctx, timeout)
  	defer cancel()
  
  	// Buffered channel so in the case of timeout it takes one write, never gets
  	// read, and can still be GC'd
  	response := make(chan ListContainersResponse, 1)
  	go func() { response <- dg.listContainers(ctx, all) }()
  	select {
  	case resp := <-response:
  		return resp
  	case <-ctx.Done():
  		// Context has either expired or canceled. If it has timed out,
  		// send back the DockerTimeoutError
  		err := ctx.Err()
  		if err == context.DeadlineExceeded {
  			return ListContainersResponse{Error: &DockerTimeoutError{timeout, "listing"}}
  		}
  		return ListContainersResponse{Error: &CannotListContainersError{err}}
  	}
  }
docs: // ListContainers returns a slice of container IDs.