Go 프로그램의 일반 패닉 복구
Go에서는 동시에 실행되는 고루틴으로 인한 패닉을 처리해야 하는 경우가 많습니다. 그러나 직접적인 Recover() 접근 방식은 현재 고루틴 내에서만 패닉을 처리할 수 있으므로 제한됩니다. 이 기사에서는 임의의 고루틴에서 일반적인 패닉 복구를 달성하기 위한 관용적 방법을 살펴봅니다.
패닉 복구 연기
고루틴에서 패닉에서 복구하는 관용적인 방법은 deferred를 사용하는 것입니다. 기능. 패닉으로 인해 종료가 발생하더라도 현재 고루틴이 종료되면 지연된 함수가 실행됩니다. Recover()를 호출하는 지연 함수를 포함하면 패닉을 포착하고 우아하게 처리할 수 있습니다.
go func() { defer func() { if r := recover(); r != nil { fmt.Println("Caught:", r) } }() panic("Go routine panic") }()
복구 기능 주입
실행된 모든 고루틴에 대한 함수를 연기하는 것은 비실용적입니다. 복구 논리를 캡슐화하는 명명된 함수를 만들고 내부에서 호출할 수 있습니다. goroutine.
func logger() { if r := recover(); r != nil { fmt.Println("Caught:", r) } } go func() { defer logger() panic("Panic in goroutine") }()
래퍼 함수 사용
간단한 접근 방식은 다른 기능을 래핑하고 패닉 복구를 처리하는 유틸리티 함수를 만드는 것입니다. 그러면 이 래퍼 함수에 패닉 안전을 구현해야 하는 모든 함수가 전달될 수 있습니다.
func wrap(f func()) { defer func() { if r := recover(); r != nil { fmt.Println("Caught:", r) } }() f() } go wrap(func() { panic("Panic in wrapped function") })
결론
지연 함수와 함수 래퍼를 활용하면 가능합니다. 임의의 고루틴에서 발생하는 패닉을 복구하고 우아하게 처리하여 Go 프로그램의 안정성을 보장합니다. 애플리케이션의 특정 요구 사항에 따라 최선의 접근 방식을 고려하십시오.
위 내용은 Go 동시 프로그램에서 일반 패닉 복구를 어떻게 구현할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!