php小编子墨,你好!关于你提到的构建错误中的问题,出现“errors.As should not be 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!" }
运行此测试会将构建错误 second 参数返回到错误。不应为 *error
。
去游乐场
但是,当在 main
中运行完全相同的代码时,程序运行没有问题:
package main import ( "errors" "fmt" ) func main() { err := &myerror{} var target error fmt.println(errors.as(err, &target)) } type myerror struct{} func (err *myerror) error() string { return "oops!" }
去游乐场
我在 go playground 和我的本地开发环境中看到了这种行为,这两个环境都使用 go 1.20。
这是 go 中的错误吗?
我可以通过创建 error
类型来解决测试中的构建失败问题:
package main import ( "errors" "fmt" "testing" ) type Error error // <===== Add error type func TestError(t *testing.T) { err := &MyError{} var target Error // <===== Use Error type fmt.Println(errors.As(err, &target)) } type MyError struct{} func (err *MyError) Error() string { return "oops!" }
该错误是由 go vet
命令报告的。 go test
命令自动运行 go vet
以报告重大问题。 go build
命令不运行 go vet
命令。
该警告不是 Go 中的错误。
使用 *error
作为第二个参数调用 errors.As 是没有意义的,因为您已经知道第一个参数满足 *error
作为第二个参数调用 errors.As 是没有意义的,因为您已经知道第一个参数满足 error
接口。几乎可以肯定你做错了什么。
以上是为什么我仅在测试中收到'errors.As should not be *error”构建错误的第二个参数?的详细内容。更多信息请关注PHP中文网其他相关文章!