PHP 편집기 Apple에서 답변해 드립니다. Go 언어에서는 고루틴에서 오류가 발생하면 자동으로 기본 코루틴으로 전파되지 않습니다. 대신, 자동으로 무시되므로 실행된 모든 고루틴에서 오류가 아닌 부분적인 오류만 수신될 수 있습니다. Go 언어 설계의 원래 의도는 프로그램을 안정적이고 효율적으로 유지하는 것이며, 오류가 발생하더라도 전체 프로그램이 즉시 중지되지 않기 때문입니다. 모든 오류를 포착하려면 채널이나 기타 메커니즘을 사용하여 오류 정보를 명시적으로 전달할 수 있습니다. 이렇게 하면 모든 오류가 올바르게 처리되는지 확인할 수 있습니다.
동시 작업을 처리하기 위한 사이클 클래스를 정의했습니다. 내가 원하는 것은 각각 고루틴에서 두 개의 함수를 실행하고, 함수가 완료될 때까지 기다렸다가 출력 오류를 병합하는 것입니다. 하지만 오류만 발생합니다. 각 메서드의 책임은 다음과 같습니다.
run
- 고루틴에서 함수를 실행하고 오류를 수집하세요
waitalldone
- 모든 기능 오류를 함께 병합하고 모든 기능이 완료될 때까지 기다립니다
do1、do2
- 테스트 기능
결국 t.log(err)
는 err1
또는 err2
를 출력하지만 err1 err2
를 출력하고 싶습니다. 오류가 누락되는 이유는 무엇입니까? t.log(err)
输出err1
或err2
,但我希望它输出err1 err2
。为什么它会漏掉一个错误。
这是因为 (*cycle).waitalldone
不会等待收集错误的 goroutine 完成。如果您使用 -race
(*cycle).waitalldone
이 goroutine 수집 오류가 완료될 때까지 기다리지 않기 때문입니다. -race
플래그를 사용하여 코드를 실행하면 때때로 여러 데이터 경합 오류가 보고될 수 있습니다. 이것은 그 중 하나입니다:
으아악
range
이 변경으로 문제가 해결됩니다.
위 내용은 내가 시작한 고루틴에서 전체 오류가 아닌 일부 오류만 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!