Compreendendo a representação de interface em Go
Ao trabalhar com interfaces em Go, é importante compreender sua representação subjacente. Dois recursos principais esclarecem este tópico, mas suas perspectivas diferem.
O artigo "Leis da Reflexão" (http://blog.golang.org/laws-of-reflection) apresenta o conceito de interface contendo um par (valor, tipo), como visto no exemplo de rio.Reader. Este par inclui o valor tty e seu tipo *os.File.
Alternativamente, o outro artigo enfatiza que as interfaces contêm apenas métodos para satisfazer a especificação da interface. No exemplo de Stringer segurando o tipo Binary, o itable (tabela de métodos de interface) lista apenas os métodos necessários para a implementação de String, excluindo outros métodos definidos no tipo Binary.
Para reconciliar essas perspectivas, considere interfaces em Go como "objetos wrapper" em tempo de execução. Eles fornecem informações sobre outro objeto, o itable, que orienta o tempo de execução na execução de métodos no objeto empacotado. Por exemplo, ao chamar Read em r, o tempo de execução usa o itable para pular para a função correspondente dentro do layout do tipo os.File.
Reflection, conforme descrito no artigo "Leis da Reflexão", fornece uma maneira conveniente maneira de explorar esta representação expondo o par (valor, tipo) através dos métodos reflect.ValueOf e reflect.TypeOf.
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