Go에서는 여러 오류를 깔끔하고 간결하게 처리하는 것이 어려울 수 있습니다. 다음 코드 조각을 고려해보세요.
aJson, err1 := json.Marshal(a) bJson, err2 := json.Marshal(b) cJson, err3 := json.Marshal(c) dJson, err4 := json.Marshal(d) eJson, err5 := json.Marshal(e) fJson, err6 := json.Marshal(f) gJson, err4 := json.Marshal(g) if err1 != nil { return err1 } else if err2 != nil { return err2 } else if err3 != nil { return err3 } else if err4 != nil { return err4 } else if err5 != nil { return err5 } else if err5 != nil { return err5 } else if err6 != nil { return err6 }
이 코드에는 몇 가지 문제가 있습니다. 첫째, 여러 if 문을 사용하여 각 오류를 개별적으로 처리합니다. 이로 인해 코드가 장황해지고 읽기 어려워집니다. 둘째, 가장 중요하거나 관련된 오류가 아닐 수도 있는 첫 번째 오류를 반환합니다.
함수 클로저를 사용하여 Go에서 여러 오류를 처리하는 더 좋은 방법이 있습니다. 다음은 함수 클로저를 사용하는 수정된 버전의 코드입니다.
var err error f := func(dest *D, src S) bool { *dest, err = json.Marshal(src) return err == nil } f(&aJson, a) && f(&bJson, b) && f(&cJson, c) && f(&dJson, d) && f(&eJson, e) && f(&fJson, f) && f(&gJson, g) return err
이 코드는 대상 변수에 대한 포인터와 소스 값이라는 두 개의 매개변수를 사용하는 함수 클로저(f)를 정의합니다. 클로저는 소스 값을 대상 변수로 마샬링하려고 시도하고 실패할 경우 오류를 설정합니다.
그런 다음 각 소스 값에 대해 함수 클로저가 호출되고 결과는 && 연산자를 사용하여 결합됩니다. 함수 클로저 중 하나라도 오류를 반환하면 그에 따라 전체 err 변수가 설정됩니다. 그렇지 않으면 err 변수는 nil이 됩니다.
이 코드는 원래 코드보다 훨씬 깔끔하고 간결합니다. 또한 모든 오류를 한 번에 처리하므로 가장 중요한 오류를 더 쉽게 식별할 수 있습니다.
위 내용은 Go에서 여러 오류를 적절하게 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!