У меня есть функция, которая воспроизводит звук, который я хочу продолжить после того, как моя программа main
напечатает на стандартный вывод и выйдет.Я полагаю, что я хочу, чтобы звук закончил воспроизводиться после выхода из программы, но я не хочу, чтобы программа main
ожидала завершения воспроизведения звука до его выхода.
Я нашел метод длявыполнить звук в независимом процессе, превратив его в исполняемый файл с именем playsound
и выполнив go install
.Затем в моей основной программе я называю это в конце main()
:
func startPlaySound() {
cmd := exec.Command("playsound")
cmd.Start()
}
main() {
// code that prints and exits
startPlaySound()
}
Это работает, но я хотел бы иметь возможность воспроизводить звук после выхода из основной программы без создания исполняемого файла.Я бы предпочел запустить эквивалент cmd.Start()
для функции, содержащей код для воспроизведения звука.
Другими словами, я бы хотел, чтобы это выглядело примерно так:
func playSound() {
// code that plays the sound
}
func startPlaySound() {
cmd := CmdFromFunction(playSound)
cmd.Start()
}
main() {
// code that prints and exits
startPlaySound()
}
Существует ли что-то вроде CmdFromFunction
?
Ответ на вопрос Обратная связь
- Это не дубликат Как мне форкать процесс go? .Я не пытаюсь раскошелиться на
main
.Я пытаюсь отделить playSound
в отдельный процесс, который продолжит выполняться после выхода из программы main
.Оба ответа на этот вопрос связаны с выполнением внешней программы, чего я и стараюсь избегать. - "подпрограммы go не предназначены для процессов" - я буквально превратил код из
playSound
висполняемый файл с именем playsound
, и теперь я выполняю его как процесс, используя cmd.Start()
.Я просто пытаюсь найти более прямой путь для этого, чем создание совершенно отдельного исполняемого файла.