Подскажите как на Golang сделать программу которая не будет завершаться?
Нужно написать демон, писать ожидание нажатия кнопки не работает когда добавляешь программу в автозапуск
for{} в конце блока main() как-то не этично
IDE предлагает заменить на select{}
Оно конечно работает но как-то мне не нравится такой код, может есть что-то другое?
$ go version
go version go1.7.4 linux/amd64
$ cat temp.go
package main
func main() {
end := make(chan struct{})
<-end
}
$ ./temp
fatal error: all goroutines are asleep - deadlock!
...
majetree: все верно. У тебя нет ни единой горуины и ты блокируешь основной и единсвенный поток. Если ты заблокируешь все горуины то будет выпадать такая ошибка.
Нужно конкретизировать задачу.
Если нужно, чтобы программа не завершалась, то можно использовать конструкцию с сигналами os/signal.
Например так:
// exit program on ps kill and Ctrl+C...
exitc := make(chan os.Signal, 1)
signal.Notify(exitc, os.Interrupt, os.Kill, syscall.SIGTERM)
// some code or goroutines
// ...
sig := <- exitc
// some cleanup or signal logging and printing
Если нужно приложение "демонизировать", то посмотрите пакет VividCortex/godaemon.