05a2b0,824633827584
m3 "656",0xc00005a260,824633827584
a "656",0xc00005a2e0,824633827584
另外还有一个关于错误处理的可比较特性的坑,因此强烈建议自定义error
用指针,否则就得确保必须可比较:
package main
import (
"errors"
"fmt"
)
func main() {
err := DoSomething(true)
ok := errors.Is(err, ErrorA)
fmt.Println(ok, err)
err = DoSomething(false)
ok = errors.Is(err, ErrorB)
fmt.Println(ok, err)
}
type CustomError struct {
Metadata map[string]string
Message string
}
func (c CustomError) Error() string {
return c.Message
}
var (
// ErrorA 包含不可比较字段,在 errors.Is 中
ErrorA = CustomError{Message: "A", Metadata: map[string]string{"Reason": "A"}}
ErrorB = &CustomError{Message: "B", Metadata: map[string]string{"Reason": "B"}}
)
func DoSomething(isA bool) error {
if isA {
return ErrorA
}
return ErrorB
}
引用
https://www.ssgeek.com/post/golang-jie-gou-ti-lei-xing-de-shen-qian-kao-bei/
https://sorcererxw.com/articles/go-comparable-type
https://blog.csdn.net/pengpengzhou/article/details/105839518
https://www.cnblogs.com/gtea/p/16850496.html