C2. Do not close a channel from a receiver goroutine. Closing the channel from a receiver could make future sender goroutines to panic.

C3. If a channel has multiple senders, do not close the channel from a sender goroutine. Closing the channel from a sender could make future sender goroutine to panic.

Alternatively, coordinate senders so that only the last sender to leave closes the channel (for instance by using either atomic int or sync.WaitGroup)

Last one sender to leave, turns off the lights, which can be controlled by a atomic int.