当我的Error struct 包含嵌套在其中的片时,Errs.is似乎不能正常工作:

package main

import (
    "errors"
    "fmt"
    "os"
)

type Response struct {
    Details []string
}

type ErrResponseError struct {
    Response Response
}

func (err ErrResponseError) Error() string {
    return "response error"
}

func main() {
    err := ErrResponseError{}
    fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{}))
}

返回

等于:FALSE

package main

import (
    "errors"
    "fmt"
    "os"
)

type Response struct {
    Details string // Changed this line
}

type ErrResponseError struct {
    Response Response
}

func (err ErrResponseError) Error() string {
    return "response error"
}

func main() {
    err := ErrResponseError{}
    fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{}))
}

返回

等于:真

................................................................................................................................................................................................................................................

推荐答案

从文档中:

如果一个错误等于该目标,或者如果它实现了一个方法为(错误)bool,使得is(Target)返回TRUE,则认为该错误与该目标匹配.

因此,您可以通过编写一个Is方法来比较两个切片.

默认的误差比较算法判断误差是否等于目标.由于您的错误包含切片,因此无法进行比较.

Go相关问答推荐

如何在另一个文件夹中使用Delve运行二进制文件?

Go协议缓冲区导入问题

仅呈现一个模板的GIN Web应用程序

创建使用逗号而不是加号分隔OU的CSR

go-chi: 接受带有反斜杠的 url 路径参数

是否可以在调试期间在 VSCode 中预览 github.com/shopspring/decimal 值?

下载和合并时输出文件已损坏

错误!在为 age-viewer-go 运行 wails dev 或 wails build 命令时

如何将整数哈希细分为范围

从Go中的随机日期开始以天为单位获取时间

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

使用 package`regexp` 查找 Golang 中的所有 mactch 子字符串,但得到意外结果

Golang:隐式 struct 匹配

Go:等待多个通道的性能损失

Go:用于 XML 解码的嵌套 struct 中的提升字段

Go 导入范围查找 protobuf 类型

如何正确判断 io.Reader 是否为零?

gob 解码器仅返回数组中的第一个元素

Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?

手动下载并放置一个 golang mod 文件