2016-06-02 2 views
0
package main 

import "time" 

func main() { 
    // infinite loop 
    for { 

     for i := 0; i < 2; i++ { 

      conn, err := opentsdb.OpenConnection() 

      if err { 
       time.Sleep(10 * time.Second) 
      } 

     } 
    } 
} 

필요 오류 블록이 발생하면 프로그램이 처음부터 실행됩니다.골란 오류 처리

처리 방법은 무엇입니까? goto를 사용

+0

맞아요. for 루프가 영원히 돌아갑니다. 요구 사항은 무엇입니까? 오류가 있으면 프로그램을 종료 하시겠습니까? 질문은 당신이하고 싶은 일에 대해 명확하지 않습니다. "다루십시오"는 다양한 것을 의미 할 수 있습니다. –

답변

6

당신은 외부 루프를 다시 시작하려면 중첩 루프

func main() { 
RESTART: 
    for { 
     for i := 0; i < 2; i++ { 
      conn, err := opentsdb.OpenConnection() 
      if err { 
       time.Sleep(10 * time.Second) 
       goto RESTART 
      } 
     } 
    } 
} 

흐름 오류를 처리하는 일반적인 방법이며, RESTART 라벨과 for 루프 사이에 아무것도, 당신은 사용할 수 있습니다 continue RESTARTRESTART 레이블에서 루프를 계속하십시오. 이 간단한 경우에는 break을 사용하면 바깥 쪽 루프도 계속됩니다.

+1

@icza : 예, 여기에서도 작동합니다. 방금 그와 같은 사소한 예가 다른 논리를 놓쳤다 고 가정 했었습니다. 그렇지 않으면 여기에서도 '깨뜨릴 수 있습니다'. – JimB

+1

JimB에게 감사드립니다. 잘 작동합니다. – vanarajcs