Go에서 프로그램 종료 없이 무한히 동작하게 하는 2가지 방법을 정리해본다.
for문
무한히 재실행되는 for문을 이용하는 것이다.
func main() { for{} }
이렇게 코드를 작성하면 위 for문은 탈출 조건이 없기 때문에 무한 실행된다.
당연히 프로그램은 종료되지 않는다.
다만 이 경우 단점도 있다.
for 루프는 CPU 자원을 소비하는데, sleep 옵션도 없거니와 loop를 매번 돌도록 설계되어 있기 때문이다. 따라서, 아무 일도 하지 않지만 자원을 소비해 비효율적이다.
channel
채널을 생성해두는 방법도 있다.
func main() { forever :=make(chan bool) // forever channel 생성 <- forever // forever 채널에서 메시지 수신 후 따로 저장하진 않고 흘려보냄 }
이 경우엔 CPU를 ㅅ고모하지 않고 기다리게 된다. Go의 런타임은 forever라는 채널을 생성했고, forever 채널로 메시지가 수신되기를 기다린다. 하지만 코드 상으로 메시지를 forever 채널로 보내는 일이 없게 설계되어 있기 때문에 무기한 대기할 뿐, 수신을 위해 CPU를 소비하지 않는다.