Паника распространяется по стеку горутины. Если её не восстановить через recover(), горутина завершается и по умолчанию паника не передаётся в другие горутины - но если непойманная паника доходит до корня горутины, программа падает.
go func() {
defer func() { if r := recover(); r != nil { log.Println(r) } }()
panic("oops")
}()