code: func (a *Airport) start() {
  	// start all the airport processors
  	go a.startArrivals()
  	go a.processArrivals()
  	go a.processDepartures()
  	go a.processHangar()
  
  	// quit on os signal
  	signalChan := make(chan os.Signal, 1)
  	signal.Notify(signalChan, os.Interrupt)
  	for {
  		select {
  		case <-signalChan:
  			a.cleanUp(true)
  			if err := safeclose.Close(a.connection); err != nil {
  				a.log.Error(err)
  			}
  			os.Exit(1)
  		case runway, ok := <-a.runwayChan:
  			if !ok {
  				a.log.Errorf("runway channel closed")
  			}
  			a.processRunway(runway)
  			time.Sleep(randomDuration(runwayClearance, runwayClearance))
  		}
  	}
  }
docs: // Start arrivals/departures and exit-on-signal procedure