Recuperar nome da função com reflexão
No Go, a reflexão fornece o mecanismo para inspecionar e manipular estruturas de programa em tempo de execução. Acessar o nome de uma função é um desses casos de uso. No entanto, tentar obter o nome diretamente de seu tipo pode resultar em uma string vazia.
Comportamento esperado
Recuperar o nome de uma função usando reflect.TypeOf(function). Name() retorna uma string vazia, pois aponta para o próprio tipo, que não contém o nome da função.
Solução
Para recuperar o nome da função, nós precisa utilizar runtime.FuncForPC. Esta função leva o ponteiro para o valor refletido da função e retorna um ponteiro para uma estrutura *Func. Chamar o método Name neste *Func produz o nome da função esperado como:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
This abordagem retorna o nome do pacote e da função, por exemplo. "pacote.função". Se desejar, o nome do pacote pode ser extraído tokenizando a string.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3