卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34359本站已运行393

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

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

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

卓越飞翔博客
上一篇: 用于获取用户驱动器的 msgraph-sdk-go 示例代码失败
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏