"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso digitar corretamente uma fatia de valores de interface no Go?

Como posso digitar corretamente uma fatia de valores de interface no Go?

Publicado em 01/01/2025
Navegar:507

How Can I Correctly Type Assert a Slice of Interface Values in Go?

Afirmação de uma fatia de valores de interface

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.

Tutorial mais recente Mais>

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