Golang의 구체적인 유형 오류 조각

PHPz
풀어 주다: 2024-02-05 22:12:12
앞으로
965명이 탐색했습니다.

Golang 中具体类型的错误片段

질문 내용

go에서 오류 래핑을 시도하고 있으며 래핑된 사용자 정의 오류 유형을 반환하는 함수가 있습니다. 내가 원하는 것은 예상되는 오류 목록을 반복하고 함수의 출력에 예상되는 오류가 포함되어 있는지 테스트하는 것입니다.

[]error 意味着自定义错误的类型将为 *fmt.wraperror,这意味着 errors.as()에 사용자 정의 오류를 넣으면 거의 항상 true가 반환된다는 것을 발견했습니다.

예를 들어 다음 코드를 고려해보세요.

으아아아

출력은

으아아아

이상적으로는 출력이

이기를 바랍니다. 으아아아

오류가 발생하는 이유는 각 테스트 사례 항목에 대해 예상되는 오류 목록을 정의할 수 있기 때문입니다. 함수에 특정 입력을 제공하면 함수가 경로를 따르고 특정 오류가 포함된 오류를 반환하게 된다는 것을 알고 있다고 가정해 보겠습니다.

어떻게 *fmt.wraperror 类型从 []error 切片转换回原始类型,以便我可以将其与 error.as함께 사용하나요?

를 사용하여 특정 유형으로 변환할 수 있다는 것을 알고 있습니다. (anothererror), 하지만 슬라이스를 반복할 때 작동하게 하려면 함수가 반환할 수 있는 모든 가능한 오류에 대해 이 작업을 수행해야 합니다. 그렇지 않습니까? ) 将其强制转换为特定类型。(anothererror),但为了在迭代切片时使其工作,我必须对函数可能返回的每个可能的错误执行此操作,不是吗?)


正确答案


您可以使用以下方法欺骗 errors.as

정답

errors.as다음을 사용하여

속일 수 있습니다:

으아아아 errors.as 的是 *error。因此,包装的错误值(即 err)被直接分配给目标值。在我的示例中,传递给 errors.as 的值是 **anothererror,并且 err 不能分配给 *anothererror인쇄 유형이 예상한 것과 다르지만

원하는 대로 작동합니다. 🎜 🎜귀하의 예가 작동하지 않는 이유는 🎜에 전달하는 내용이 *error이기 때문입니다. 따라서 래핑된 오류 값(예: err)이 대상 값에 직접 할당됩니다. 내 예에서 🎜에 전달된 값은 **anothererror이고 err*anothererror에 할당할 수 없습니다. 🎜

위 내용은 Golang의 구체적인 유형 오류 조각의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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