Когда main() возвращается, процесс завершается. Все остальные горутины при этом останавливаются - они не получают никакого сигнала, просто выполнение процесса прекращается.
var wg sync.WaitGroup
wg.Add(2)
go func() { defer wg.Done(); work1() }()
go func() { defer wg.Done(); work2() }()
wg.Wait()
Либо используйте канал или context для сигнала завершения. Без явного ожидания "фоновые" горутины могут не успеть выполниться.