go - Go 自定义错误类型:为什么要返回指向错误的指针?
问题描述
自定义错误类型允许调用者使用类型断言检查错误类别:
type MyError struct {
Message string
}
func (e MyError) Error() string {
return e.Message
}
func GenerateError() error {
return MyError{"example text"}
}
func main() {
err := GenerateError()
_, ok := err.(MyError)
fmt.Printf("%t\n", ok)
}
打印“真实”。
然而,在我看到的所有解释这种技术的例子中,人们不会这样写代码。相反,它们传递指向自定义错误类型的指针:
type MyError struct {
Message string
}
func (e *MyError) Error() string {
return e.Message
}
func GenerateError() error {
return &MyError{"example text"}
}
func main() {
err := GenerateError()
_, ok := err.(*MyError)
fmt.Printf("%t\n", ok)
}
示例: gobyexample.com,这篇 Medium 文章。
额外的间接性有什么好处吗?如果它只是更复杂,为什么它更常见?
解决方案
推荐阅读
- spring - 配置 Spring Security 以显示样式
- c - 关于C中内存分配的问题
- android - Facebook 登录:无法加载 URL 在 android studio 中使用 facebook-android-sdk 登录时,此 URL 的域不包含在应用程序的域中
- xcode - 在没有 Xcode 的 Mac 上安装 Git
- java - 如何通过 thymeleaf 访问 html 文件中的可选值?
- java - 执行 Android 应用程序时显示不相关的应用程序名称 - gradle 错误?
- swift - 如何解决由于 macOS 应用程序上的 CIFilter 导致的错误
- python - 如何使用 python selenium 单击带有文本 bb1 的元素
- c - 我正在尝试使用指针通过函数更改结构中的值,但是在函数中输入地址时出现错误
- angular - 为什么 red 和 IntelliJ 不支持 Angular 中的有效模型?