"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 passar uma fatia de fatias como argumentos variados no Go?

Como passar uma fatia de fatias como argumentos variados no Go?

Publicado em 2024-11-07
Navegar:871

How to Pass a Slice of Slices as Variadic Arguments in Go?

Passando fatias descompactadas como argumentos variáveis

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.

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