제네릭을 사용하여 Go에서 인체공학적 오류 처리
https://github.com/chrismwendt/go-exceptions
Go의 일반적인 오류 처리는 다음과 같습니다.
func f() error {
err := g1()
if err != nil {
return err
}
v1, err := g2()
if err != nil {
return err
}
// ...
}
다음과 같은 오류 처리에는 몇 가지 단점이 있습니다.
if err != nil { return err }
3줄 추가 소요f(g())
가 값과 오류를 반환하고 g()
가 값만 예상하는 경우 f()
를 수행할 수 없습니다. 이로 인해 강제로 코드를 분할하고 임시 변수를 추가하고 if
를 추가해야 합니다. 수동으로 오류 처리이것을 어떻게 더 인체 공학적으로 만들 수 있습니까? 아마도 이상적으로 Go는 Rust's
?
operator에 대한 지원을 추가하겠지만 panic()
및 recover()
을 사용하여 오류를 명시적으로 변수에 저장할 필요 없이 오류가 발생하도록 할 수 있습니다.이동 예외의 사용법은 다음과 같습니다.
import ex "github.com/chrismwendt/go-exceptions"
func f() (err error) {
// Catch() calls recover() and assigns the error to &err
defer ex.Catch(&err)
// Throw() calls panic() if the error argument is not nil
ex.Throw(g1())
// Throw() also accepts a label
ex.Throw(g2(), "g2")
// Throw1() returns 1 value, Throw2() returns 2 values, etc.
v1 := ex.Throw1(g3())
// Passing arguments is easier
v2 := ex.Throw1(g4(ex.Throw(g5())))
// ...
}
이것은 몇 가지 면에서 더 인체공학적입니다.
err
변수내부적으로:
Throw(err)
는 기본적으로 if err != nil { panic(err) }
입니다. Catch(*error)
모든 패닉에서 복구하고 복구된 값을 주어진 오류좀 더 나아가 오류를 반환하는 대신 패닉 규칙을 채택할 수 있지만 이는 일반적인 Go 호출 규칙에서 벗어나 호출하거나 다른 코드에서 호출할 때 마찰을 일으킬 수 있습니다.
Reference
이 문제에 관하여(제네릭을 사용하여 Go에서 인체공학적 오류 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chrismwendt/ergonomic-error-handling-in-go-using-generics-17b9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)