I have, on occasion, used a similar pattern, but instead of sending something, I simply close the channel (usually with a "defer close(c)" at the beginning of the function/closure that encompasses the main code of the goroutine's work).
That way, if I end up having multiple waiters, they will all be able to proceed.
That way, if I end up having multiple waiters, they will all be able to proceed.