Go中error转string用Error()方法,string转error用errors.New或fmt.Errorf,自定义错误需实现Error()方法,注意nil判断和错误比较应使用errors.Is或errors.As。

在 Go 语言中,error 是一个内置接口类型,用于表示错误状态。最常见的实现方式是通过字符串封装错误信息。在实际开发中,经常需要在 error 类型和 string 类型之间进行转换。以下是常用的转换方法和注意事项。
error 转 string
将 error 转换为字符串非常简单,只需调用其 Error() 方法,该方法返回一个字符串。
err := fmt.Errorf("something went wrong")errStr := err.Error()
// 或直接使用 %v
errStr = fmt.Sprintf("%v", err)
这两种方式效果相同,推荐使用 err.Error(),语义更清晰。
string 转 error
从字符串创建 error 类型,最常用的方式是使用标准库中的 errors.New 或 fmt.Errorf。
立即学习“go语言免费学习笔记(深入)”;
errMsg := "file not found"err1 := errors.New(errMsg)
err2 := fmt.Errorf("%s", errMsg)
两者都能生成 error 类型实例。区别在于:
Perl学习手札是台湾perl高手写的一篇文章,特打包为chm版,方便大家阅读。 关于本书 1. 关于Perl 1.1 Perl的历史 1.2 Perl的概念 1.3 特色 1.4 使用Perl的环境 1.5 开始使用 Perl 1.6 你的第一个Perl程序 2. 标量变量(Scalar) 2.1 关于标量 2.1.1 数值 2.1.2 字符串 2.1.3 数字与字符串转换 2.2 使用你自己的变量 2.3 赋值 2.3.1 直接设定 2.3.2 还可以这样 2.4 运算 2.5 变量的输出/输入 2.
- errors.New 直接基于字符串创建错误,性能稍高
- fmt.Errorf 支持格式化,适合拼接变量或动态信息
自定义 error 类型中的字符串处理
有时需要定义自己的错误类型,通常实现 Error() 方法返回字符串。
type MyError struct {Msg string
}
func (e *MyError) Error() string {
return e.Msg
}
err := &MyError{Msg: "custom error"}
errStr := err.Error() // 转为 string
这种模式适合需要携带额外上下文或错误码的场景。
注意事项
在转换过程中需要注意:
- nil error 不能调用 Error(),会引发 panic。使用前应判断是否为 nil
- error 到 string 是有损转换,无法还原成原始错误类型(除非使用 fmt.Errorf 配合 %w 包装)
- 如果需要比较错误,建议使用 errors.Is 或 errors.As,而不是字符串比较
基本上就这些。掌握 error 与 string 的转换,能更灵活地处理日志、API 响应和错误传递。关键是理解 error 是接口,而字符串是具体值,转换时注意语义和安全性。









