Добрый день.
Насколько я понял для такой задачи каналы не особо подходят.
Если в случае новой записи в канал данные теряют актуальность, то лучше применить замыкания например так:
func Entangle() (in func(interface{}), out func() interface{}) {
var data interface{}
var mu sync.Mutex
in = func(d interface{}) {
mu.Lock()
data = d
mu.Unlock()
}
out = func() interface{} {
mu.Lock()
d := data
mu.Unlock()
return d
}
return in, out
}
и с помощью возвращенной функции in - писать, а с out - читать.
Можно так же применить мьютекс для гарантии целостности данных при конкурентном считывании и записи, так же замкнутый между этими двумя функциями, но это иногда может быть не обязательно