code: func (r *readPump) Work() {
  	cnx := redis.PubSubConn{Conn: r.cnx}
  	defer close(r.closer)
  
  	for {
  		msg := cnx.Receive()
  
  		if err, isErr := msg.(error); isErr && shouldNotifyUser(err) {
  			select {
  			case r.errs <- err:
  			case <-r.closer:
  				return
  			}
  		} else if !isErr {
  			select {
  			case r.data <- msg:
  			case <-r.closer:
  				return
  			}
  		}
  	}
  }
docs: // Work starts reading from the connection and blocks until it is closed.