Как в Golang отлавливать сетевые ошибки?
полное разворачивание ошибки:
https://play.golang.org/p/FXoa3wdGj8S

или проще, просто сравнение с ошибкой:
https://play.golang.org/p/KeTl1QAJBMs

узнать что за структура в ошибке, можно с помощью дебагера:

С go 1.13 ошибки можно врапить (упаковывать):
err := fmt.Errorf("access denied: %w", ErrPermission)
...
if errors.Is(err, ErrPermission)
Статья про враппинг ошибок