在 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
为布尔值判断是否成功。