Open1

go errors.Is

hiromshiroms

https://go.dev/play/p/88K2Y4WEUOB
完全に理解した気持ちになれる

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
違う
同じ
同じ