Utilizando ponteiro e referência, podemos retornar a struct que representa nosso erro customizado
                e acessar suas informações como parte do tratamento para exibição. A função errors.As do 
                package errors é utilizado para validação.
            
            
                Modificamos o nosso método Error do exemplo anterior para o mostrado abaixo:
            
            Ex 8:
            //metodo da interface error
func (e MeuErro) Error() string {
   return e.msg
}
            
                Na função que retorna o nosso erro, adicionamos o retorno de uma referência para a struct de erro:
            
            Ex 9:
            //função p/ retorno de erro
func funcao(p int) (int, error) {
   if p < 0 {
       return 0, &MeuErro {codigo: 0, msg:"valor < 0 "} //referência p/ erro
   }
   return p*2, nil
}
            
                Em nossa main, alteramos o tratamento adicionando o método errors.As para validação 
                do nosso erro customizado lançado e exibimos suas informações.
            
            Sintaxe: errors.As
            func As(err error, target any) bool
            Ex 10:
            func main() {
    _,erro :=funcao(-1);
    var mErro *MeuErro; //ponteiro
    
    if errors.As(erro, &mErro) {
       fmt.Printf("msg:%s\ncodigo:%d",mErro.msg,mErro.codigo)
    }
}
            
                Abaixo, o código final contendo os trechos de código mostrados nesta parte:
            
            Ex 11:
            package main
import "fmt"
import "errors"
//novo tipo
type MeuErro struct{
codigo int
msg string
}
//método da interface error
func (e MeuErro) Error() string {
   return e.msg
}
//função p/ retorno de erro
func funcao(p int) (int, error) {
   if p < 0 {
       return 0, &MeuErro {codigo: 0, msg:"valor < 0 "}
   }
   return p*2, nil
}
func main() {
    _,erro :=funcao(-1);
    var mErro *MeuErro; //ponteiro
    
    if errors.As(erro, &mErro) { //referência
       fmt.Printf("msg:%s\ncodigo:%d",mErro.msg,mErro.codigo)
    }else{
       fmt.Printf("OK, sem bugs" )
    }
}
            Saída
            erro:
codigo: 0
msg: valor < 0