No Go, funções variáveis aceitam um número indefinido de argumentos de um tipo específico. Ao passar uma fatia de fatias para tal função, é crucial entender a conversão de tipo e os mecanismos de descompactação envolvidos.
Se a fatia contiver elementos do mesmo tipo que o parâmetro variadico, a fatia poderá ser passada sem desempacotando. No entanto, se a fatia contém uma mistura de tipos ou fatias dentro de fatias, a situação se torna mais complexa.
De acordo com a especificação Go, se o argumento final para uma função variadica for atribuível a um tipo de fatia, ele pode será passado inalterado como o valor do parâmetro variável se for seguido por .... Isso significa que nenhuma nova fatia será criada.
No caso de uma fatia de fatias, a fatia em si não pode ser atribuída ao parâmetro variadico (do tipo []interface{}). É por isso que um erro é gerado ao tentar passar sliceOfSlices... para a função unpack.
Para resolver esse problema, uma etapa intermediária é necessária. Uma nova fatia do tipo apropriado ([]interface{} neste caso) deve ser criada e os elementos da fatia de fatias copiados para ela. Essa nova fatia pode então ser passada para a função unpack usando ....
Por exemplo:
var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
sliceOfSlices2 = append(sliceOfSlices2, v)
}
unpack(sliceOfSlices2...)
Essa abordagem garante que cada elemento da fatia de fatias seja passado separadamente para a função unpack, conforme pretendido.
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