Пример, конечно, очень странный. Не ясно, где применять такую функцию.
Но матчинг ошибки через Is и вынесение ее в var сделаны правильно.
Is используем, когда надо проверить, наследована ли ошибка от указанной кастомной ошибки.
As используем, когда надо получить оригинальную структуру этой кастомной ошибки и посмотреть у нее нужные поля или дернуть нужные методы.
As использовался бы, например, если бы мы хотели внутрь ошибки всунуть доп. информацию и иметь к ней доступ. Например, http-код для этой ошибки.
https://go.dev/play/p/AGbxpqQKteC
type CustomError struct {
Text string
HttpCode int
}
func (c *CustomError) Error() string {
return c.Text
}
func main() {
err := doSomeStuff()
if err != nil {
customErr := &CustomError{}
if errors.As(err, &customErr) {
fmt.Println(customErr.Text, " http code:", customErr.HttpCode)
}
}
}
func doSomeStuff() error {
return &CustomError{
Text: "please provide a password",
HttpCode: 401,
}
}