충돌에도 불구하고 고루틴 실행 유지
Go에서 고루틴은 강력하지만 오류나 패닉으로 인해 충돌이 발생할 수 있습니다. 한 고루틴의 실패가 다른 고루틴에 영향을 미치지 않도록 하기 위해 개발자는 영향을 받지 않은 고루틴을 계속 실행하는 방법이 있는지 궁금해할 수 있습니다.
패닉에서 복구하기 위해 내장된 Recover() 기능이 활용됩니다. 이를 통해 지연된 함수 내에서 패닉을 포착할 수 있습니다. 다음 도우미 함수인 protected()는 이 메커니즘을 사용하여 패닉 복구 기능이 있는 고루틴을 시작합니다.
func protect(f func()) { defer func() { if err := recover(); err != nil { log.Printf("Recovered: %v", err) } }() f() }
이 보호 기능을 사용하려면 함수를 protected()에 인수로 전달하기만 하면 됩니다. 지속적으로 "틱"을 인쇄하는 for 루프 내에 이 호출을 래핑함으로써 다른 고루틴에서 패닉이 발생하더라도 protected()로 보호되는 고루틴이 어떻게 계속 실행되는지 보여줄 수 있습니다.
func main() { go protect(doPanic) for { time.Sleep(time.Second) fmt.Println("tick") } }
이 테스트 애플리케이션 다음과 같이 출력됩니다:
2021/03/04 14:12:31 about to panic 2021/03/04 14:12:31 Recovered: test tick tick tick ...
보시다시피 doPanic 함수의 패닉이 복구되어 처리되는 반면 보호된 고루틴은 계속 실행되고 인쇄됩니다. "틱." 이 접근 방식은 고루틴을 패닉으로부터 효과적으로 격리하여 단일 오류가 전파되지 않고 전체 애플리케이션이 충돌하지 않도록 보장합니다.
위 내용은 패닉 이후에도 Go 고루틴을 어떻게 계속 실행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!