package airport import ( "fmt" "time" ) type Runway struct { takeoffDuration time.Duration queue chan Aircraft } func NewRunway(takeoffDuration time.Duration) Runway { return Runway{ takeoffDuration: takeoffDuration, queue: make(chan Aircraft), } } func (r *Runway) Start() { defer fmt.Println("runway terminated") for ac := range r.queue { fmt.Printf("Flight %v to %v is taking off\n", ac.Flight.Id, ac.Flight.Destination) time.Sleep(r.takeoffDuration) fmt.Printf("\033[32mFlight %v to %v has taken off with %v passengers and %v bags on board\033[0m\n", ac.Flight.Id, ac.Flight.Destination, int(len(ac.Passengers)), int(len(ac.Baggage))) } } func (r *Runway) ProcessAircraft(ac Aircraft) { fmt.Printf("Flight %v is waiting for takeoff\n", ac.Flight.Id) r.queue <- ac }