매우 긴 ETL 작업을 수행하는 코드가 있습니다. 가끔 네트워크 문제가 있습니다. read tcp 10.10.10.10:32423 -> 20.20.20.20:2344: i/o timeout
오류를 catch하고 작업을 다시 시도하고 싶습니다.오류가 발생한 경우 코드 반복
for {
err := mssql.Db.ProcessAllData(true, &processedAsutpIds, filename)
if err == nil {
fmt.Println("done.")
os.Exit(0)
} else {
fmt.Println(err.Error())
fmt.Println("!!!! Error occurred - sleep for 5 minutes")
time.Sleep(time.Minute * 5)
}
}
더 관용적 인 방법으로 그것을 다시 할 수 있습니다 : 여기
내 코드?
은 https : //play.golang합니다. org/p/ZQgQfmO-tK – mkopriva
@mkopriva는 코드가 첫 번째 오류 – demas
과 함께 올바르게 작동하는 것처럼 보입니다. 오타를 바로 잡기 전에 내 의견을 파악 했어야합니다 ('if'를'for'로 변경했습니다). 다음은 실행 가능한 예제입니다. https://play.golang.org/p/iFEsfOuvow. 기본적으로 Go의 while 루프입니다. 'for err! = nil {...'='while error do'. – mkopriva