>백엔드 개발 >Golang >테스트에서 두 번째 매개변수에 대해 'errors.As should not be *error' 빌드 오류만 나타나는 이유는 무엇입니까?

테스트에서 두 번째 매개변수에 대해 'errors.As should not be *error' 빌드 오류만 나타나는 이유는 무엇입니까?

WBOY
WBOY앞으로
2024-02-08 22:06:20779검색

为什么我仅在测试中收到“errors.As should not be *error”构建错误的第二个参数?

php 편집기 Zimo, 안녕하세요! 언급한 빌드 오류 문제와 관련하여 "errors.As should not be error" 오류가 발생하는 데는 여러 가지 이유가 있을 수 있습니다. 첫째, 이 오류는 일반적으로 빌드 중에 잘못된 두 번째 인수가 사용되었음을 의미합니다. 두 번째 매개변수가 정확하고 필수 유형과 일치하는지 확인해야 합니다. 둘째, 테스트에서 잘못된 데이터를 사용하고 있을 수 있습니다. 테스트 데이터를 주의 깊게 검토하고 예상 형식과 요구 사항을 충족하는지 확인하세요. 마지막으로 이 오류는 프레임워크나 라이브러리 문제로 인해 발생할 수도 있습니다. 이 경우 관련 문서를 참조하거나 커뮤니티의 도움을 받아 해결 방법을 찾는 것이 좋습니다. 이 팁이 도움이 되기를 바랍니다!

질문 내용

다음 테스트를 고려해보세요:

으아악

이 테스트를 실행하면 빌드 오류가 발생합니다 second 参数返回到错误。不应为 *error.

놀이터로 가기

그러나 main에서 정확히 동일한 코드를 실행하면 프로그램이 문제 없이 실행됩니다.

으아악

놀이터로 가기

go 1.20을 사용하는 go 놀이터와 로컬 개발 환경에서 이 동작이 나타납니다.

이게 버그인가요?

편집

다음 유형을 error 생성하여 테스트에서 빌드 실패 문제를 해결할 수 있었습니다.

import (
    "errors"
    "fmt"
    "testing"
)

func testerror(t *testing.t) {
    err := &myerror{}
    var target error
    fmt.println(errors.as(err, &target))
}

type myerror struct{}

func (err *myerror) error() string {
    return "oops!"
}

Solution

이 오류는 go vet 命令报告的。 go test 命令自动运行 go vet 以报告重大问题。 go build 命令不运行 go vet 명령으로 인해 발생합니다.

이 경고는 Go의 버그가 아닙니다.

errors.As를 호출하려면 *error를 두 번째 매개변수로 사용하세요. 예 첫 번째 매개변수가 *error 作为第二个参数调用 errors.As 是没有意义的,因为您已经知道第一个参数满足 error 인터페이스를 충족한다는 것을 이미 알고 있으므로 말이 되지 않습니다. 당신은 거의 확실히 뭔가 잘못하고 있습니다.

위 내용은 테스트에서 두 번째 매개변수에 대해 'errors.As should not be *error' 빌드 오류만 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제