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
接口。几乎可以肯定你做错了什么。