>  기사  >  백엔드 개발  >  내가 시작한 고루틴에서 전체 오류가 아닌 일부 오류만 발생하는 이유는 무엇입니까?

내가 시작한 고루틴에서 전체 오류가 아닌 일부 오류만 발생하는 이유는 무엇입니까?

WBOY
WBOY앞으로
2024-02-09 14:40:201180검색

为什么我只收到部分错误,而不是我启动的 goroutine 中的所有错误?

PHP 편집기 Apple에서 답변해 드립니다. Go 언어에서는 고루틴에서 오류가 발생하면 자동으로 기본 코루틴으로 전파되지 않습니다. 대신, 자동으로 무시되므로 실행된 모든 고루틴에서 오류가 아닌 부분적인 오류만 수신될 수 있습니다. Go 언어 설계의 원래 의도는 프로그램을 안정적이고 효율적으로 유지하는 것이며, 오류가 발생하더라도 전체 프로그램이 즉시 중지되지 않기 때문입니다. 모든 오류를 포착하려면 채널이나 기타 메커니즘을 사용하여 오류 정보를 명시적으로 전달할 수 있습니다. 이렇게 하면 모든 오류가 올바르게 처리되는지 확인할 수 있습니다.

질문 내용

동시 작업을 처리하기 위한 사이클 클래스를 정의했습니다. 내가 원하는 것은 각각 고루틴에서 두 개의 함수를 실행하고, 함수가 완료될 때까지 기다렸다가 출력 오류를 병합하는 것입니다. 하지만 오류만 발생합니다. 각 메서드의 책임은 다음과 같습니다.

run - 고루틴에서 함수를 실행하고 오류를 수집하세요

waitalldone - 모든 기능 오류를 함께 병합하고 모든 기능이 완료될 때까지 기다립니다

do1、do2 - 테스트 기능

으아악

결국 t.log(err)err1 또는 err2를 출력하지만 err1 err2를 출력하고 싶습니다. 오류가 누락되는 이유는 무엇입니까? t.log(err)输出err1err2,但我希望它输出err1 err2。为什么它会漏掉一个错误。

解决方法

这是因为 (*cycle).waitalldone 不会等待收集错误的 goroutine 完成。如果您使用 -race

해결 방법

이는 (*cycle).waitalldone이 goroutine 수집 오류가 완료될 때까지 기다리지 않기 때문입니다. -race 플래그를 사용하여 코드를 실행하면 때때로 여러 데이터 경합 오류가 보고될 수 있습니다. 이것은 그 중 하나입니다:

으아악 range이 변경으로 문제가 해결됩니다.

으아악 🎜for 루프는 🎜 절을 사용하여 단순화할 수 있습니다. 🎜 으아악

위 내용은 내가 시작한 고루틴에서 전체 오류가 아닌 일부 오류만 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제