Na programação, é comum encontrar situações em que você precisa digitar uma fatia de valores de interface. No entanto, isso às vezes pode levar a erros. Vamos nos aprofundar nos motivos pelos quais declarar uma fatia de valores de interface nem sempre é viável.
Ao tentar digitar assert para um tipo específico, como []Symbol, a partir de uma fatia de valores de interface, []Node , como no exemplo fornecido:
args.([]Symbol)
Você pode encontrar o seguinte erro:
invalid type assertion: args.([]Symbol) (non-interface type []Node on left)
Este erro surge porque uma fatia, como []Node, não é um tipo de interface, ao contrário do próprio Node. Uma fatia possui seu próprio tipo distinto com seu próprio conjunto de comportamentos e métodos. Portanto, falta-lhe a fluidez e adaptabilidade de uma interface, o que permite que o tipo subjacente mude dinamicamente.
Embora possa parecer conveniente tratar uma fatia dos valores da interface como uma interface, isso viola fundamentalmente o conceito de digitação . No exemplo acima, a intenção é converter os argumentos da fatia em uma fatia de valores do Símbolo. No entanto, como args é uma fatia dos valores do Node, uma asserção de tipo direta não pode ser executada.
Para lidar corretamente com esta situação, você pode utilizar uma abordagem alternativa:
symbols := make([]Symbol, len(args)) for i, arg := range args { symbols[i] = arg.(Symbol) }
Este código cria uma nova fatia de valores de Símbolo, símbolos e itera sobre a fatia de args, convertendo cada elemento em um Símbolo usando uma afirmação de tipo. Essa conversão manual garante que cada elemento na fatia resultante esteja em conformidade com o tipo desejado, fornecendo a funcionalidade desejada sem a necessidade de asserções de tipo inválidas.
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