code: func (s *Server) Shutdown(ctx context.Context) error {
  	errChan := make(chan error)
  	for _, srvr := range s.httpListeners {
  		go func(s httpListener) {
  			errChan <- s.Shutdown(ctx)
  		}(srvr)
  	}
  	// wait until each server has finished shutting down
  	var errorList []error
  	for i := 0; i < len(s.httpListeners); i++ {
  		err := <-errChan
  		if err != nil {
  			errorList = append(errorList, err)
  		}
  	}
  
  	if len(errorList) > 0 {
  		errMsg := "error while shutting down: "
  		for i, err := range errorList {
  			errMsg += fmt.Sprintf("(%d) %s. ", i, err.Error())
  		}
  		return errors.New(errMsg)
  	}
  	return nil
  }
docs: // Shutdown will attempt to gracefully shutdown each of the http servers
  // currently in use by the OPA Server. If any exceed the deadline specified
  // by the context an error will be returned.