type merger … type mux … // newMux creates a new mux that can merge changes from multiple sources. func newMux(merger merger) *mux { … } // ChannelWithContext returns a channel where a configuration source // can send updates of new configurations. Multiple calls with the same // source will return the same channel. This allows change and state based sources // to use the same channel. Different source names however will be treated as a // union. func (m *mux) ChannelWithContext(ctx context.Context, source string) chan interface{ … } func (m *mux) listen(source string, listenChannel <-chan interface{ … }