Go 的 error断言代码示范

21 min read

在 Go 中,错误处理通常使用 error 接口类型。当需要将 error 转换为其他类型时,可以使用断言来实现。以下是一个示例代码:

func someFunc() error {
   // do something here
   return &MyError{"Error message"}
}

func main() {
   err := someFunc()

   if err != nil {
      if e, ok := err.(*MyError); ok {
         fmt.Println("Error message:", e.Msg)
      } else {
         fmt.Println("Unknown error occurred.")
      }
   }
}

type MyError struct {
   Msg string
}

func (e *MyError) Error() string {
   return e.Msg
}

在这个示例中,someFunc 函数返回一个 MyError 类型的错误。在 main 函数中,我们使用断言将错误类型转换为 *MyError。如果断言成功,我们可以访问 MyError 结构体中的 Msg 字段,即错误消息。如果断言失败,则表明产生了未知错误。

请注意,在 Go 中,断言使用 .(type) 语法进行实现,如下所示:

v, ok := x.(T)

其中,x 为要断言的对象,T 为目标类型,v 为目标类型的值,ok 为布尔值判断是否成功。