code: func (o *Observer) Start() {
  	for {
  		select {
  		case evt := <-o.notify: // We have an event to observe
  			if len(o.observers) == 0 {
  				log.Printf("Ignoring event due to no observers: %s", evt.ID)
  				continue
  			}
  
  			evtb, err := json.Marshal(evt)
  			if err != nil {
  				log.Printf("Error marshaling event: %s", err)
  				continue
  			}
  
  			sse := []byte("event: " + evt.Type + "\ndata: ")
  			sse = append(sse, append(evtb, []byte("\n\n")...)...)
  
  			for n := range o.observers {
  				n <- sse
  			}
  
  		case n := <-o.newObservers:
  			o.observers[n] = true
  		case n := <-o.closedObservers:
  			delete(o.observers, n)
  
  		case <-o.closed: // The Observer has been closed.
  			return
  		}
  	}
  }
docs: // Start begins listening for notifications of observable events. It returns
  // after stop has been called.