> 백엔드 개발 > Golang > Go의 `recover()` 기능은 어떻게 패닉 이후에도 여러 고루틴을 계속 실행할 수 있나요?

Go의 `recover()` 기능은 어떻게 패닉 이후에도 여러 고루틴을 계속 실행할 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-26 08:24:09
원래의
806명이 탐색했습니다.

How Can Go's `recover()` Function Keep Multiple Goroutines Running After a Panic?

충돌 발생 시 여러 고루틴 실행 유지

Go에서 여러 고루틴으로 작업할 때 하나의 고루틴이 있는 시나리오를 고려하는 것이 중요합니다. 충돌이나 패닉이 발생하여 잠재적으로 전체 프로그램에 영향을 미칠 수 있습니다. 이를 방지하려면 프로그램은 이러한 상황을 우아하게 처리하여 다른 고루틴이 계속 실행될 수 있도록 해야 합니다.

복구 기능 사용

Go는 내장된 복구( ) 패닉을 처리하고 복구할 수 있는 기능입니다. 이 함수를 사용하려면 지연된 함수 내에서 호출되어야 합니다. 이러한 방식으로 패닉이 발생하면 이를 캡처하고 지연된 함수가 완료된 후 프로그램 실행을 재개합니다.

다음은 Recover()를 활용하는 방법에 대한 예입니다.

func doPanic() {
    fmt.Println("About to panic")
    panic("test")
}

func protect(f func()) {
    defer func() {
        if err := recover(); err != nil {
            fmt.Printf("Recovered: %v", err)
        }
    }()

    f()
}

func main() {
    go protect(doPanic)

    for {
        time.Sleep(time.Second)
        fmt.Println("Tick")
    }
}
로그인 후 복사

설명

  • doPanic은 의도적으로 패닉.
  • protect는 함수를 고루틴으로 래핑하여 지연된 함수를 사용하여 모든 패닉을 트랩하는 도우미 함수입니다.
  • 기본적으로, 패닉을 보여주기 위해 보호(doPanic)가 고루틴으로 실행됩니다. 복구.

출력

이 코드가 실행되면 다음과 같이 출력됩니다.

About to panic
Recovered: test
Tick
Tick
Tick
...
로그인 후 복사

이는 doPanic이 패닉이 발생하면 프로그램은 복구() 호출로 인해 계속 실행되어 다른 고루틴이 계속 실행될 수 있습니다.

recover()를 사용하면 프로그램이 계속 실행될 수 있지만 근본적인 패닉 발생을 방지할 수는 없다는 점에 유의하는 것이 중요합니다. 따라서 향후 패닉이 재발하지 않도록 패닉의 근본 원인을 파악하고 해결하는 것이 여전히 중요합니다.

위 내용은 Go의 `recover()` 기능은 어떻게 패닉 이후에도 여러 고루틴을 계속 실행할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿