Error Wrapping and Inspection
Errors As
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.