panic() 또는 recover()를 직접 호출하는 defer 및 go 문을 보고합니다.
이러한 구문은 거의 유용하지 않으며 panic() 및 recover() 메커니즘을 잘못 사용한 것일 수 있습니다.
특히 다음 경우입니다.
go panic(): 새로 시작된 고루틴에 즉시 panic이 발생합니다.defer panic(): 이 구문이 사용된 함수는 종료 시 항상 panic이 발생합니다.go recover(): 새로 시작된 고루틴에 panic이 발생할 수 없으므로 아무 효과가 없습니다.defer recover(): 이 구문이 사용된 함수는 확인 없이 panic을 중단합니다. 이것은 유효한 사용 사례일 수 있지만, recover()에 의해 반환된 값을 검사하는 것이 관용적입니다.
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered from: ", r)
}
}()
Go 구문 및 panic 처리에 대한 자세한 내용은 Go 언어 사양의 Handling panics 및 Go statements(Go 구문)를 참조하세요.