errors.As extracts a typed error from a wrapped error chain.

Errors As

errors_as.go
package main

import (
	"errors"
	"fmt"
	"strconv"
)

func main() {
	var raw = 
	_, parseErr := strconv.Atoi(raw)
	var numberErr *strconv.NumError
	matched := false
	function := "none"
	value := "none"

	if parseErr != nil {
		err := fmt.Errorf("parse count: %w", parseErr)
		matched = errors.As(err, &numberErr)
		if numberErr != nil {
			function = numberErr.Func
			value = numberErr.Num
		}
	}

	fmt.Println("raw=", raw)
	fmt.Println("matched=", matched)
	fmt.Println("function=", function)
	fmt.Println("value=", value)
}
package main

import (
	"errors"
	"fmt"
	"strconv"
)

func main() {
	var raw = 
	_, parseErr := strconv.Atoi(raw)
	var numberErr *strconv.NumError
	matched := false
	function := "none"
	value := "none"

	if parseErr != nil {
		err := fmt.Errorf("parse count: %w", parseErr)
		matched = errors.As(err, &numberErr)
		if numberErr != nil {
			function = numberErr.Func
			value = numberErr.Num
		}
	}

	fmt.Println("raw=", raw)
	fmt.Println("matched=", matched)
	fmt.Println("function=", function)
	fmt.Println("value=", value)
}
package main

import (
	"errors"
	"fmt"
	"strconv"
)

func main() {
	var raw = 
	_, parseErr := strconv.Atoi(raw)
	var numberErr *strconv.NumError
	matched := false
	function := "none"
	value := "none"

	if parseErr != nil {
		err := fmt.Errorf("parse count: %w", parseErr)
		matched = errors.As(err, &numberErr)
		if numberErr != nil {
			function = numberErr.Func
			value = numberErr.Num
		}
	}

	fmt.Println("raw=", raw)
	fmt.Println("matched=", matched)
	fmt.Println("function=", function)
	fmt.Println("value=", value)
}
errors as Use `errors.As` when a caller needs details from a specific error type rather than just a yes-or-no match.