Open1
go errors.Is
完全に理解した気持ちになれる
package main
import (
"errors"
"fmt"
)
type specificError struct {
cause error
}
type causeError struct {
}
func (e *specificError) Error() string {
return "specific"
}
func (e *causeError) Error() string {
return "cause"
}
func (e *specificError) Unwrap() error {
return e.cause
}
var specificE *specificError
func main() {
fmt.Println("Hello, 世界")
e1 := &specificError{cause: &causeError{}}
fmt.Println(e1.Error())
if errors.Is(e1, &specificError{}) {
fmt.Println("同じ")
} else {
fmt.Println("違う")
}
if errors.Is(e1, &causeError{}) {
fmt.Println("同じ")
} else {
fmt.Println("違う")
}
e := some()
if errors.Is(e, specificE) {
fmt.Println("同じ")
} else {
fmt.Println("違う")
}
}
func some() error {
return specificE
}
Hello, 世界
specific
違う
同じ
同じ