Estou curioso para saber por que o Go não se converte implicitamente []T
em []interface{}
quando implicitamente se converte T
em interface{}
. Há algo não trivial nessa conversão que estou perdendo?
Exemplo:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
reclama
não pode usar um (tipo [] string) como tipo [] interface {} no argumento da função
E se eu tentar explicitamente, a mesma coisa: b := []interface{}(a)
reclama
não é possível converter uma (tipo [] string) para digitar [] interface {}
Então, toda vez que preciso fazer essa conversão (o que parece surgir bastante), tenho feito algo assim:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Existe uma maneira melhor de fazer isso, ou funções de biblioteca padrão para ajudar com essas conversões? Parece meio bobo escrever 4 linhas de código extras toda vez que eu quiser chamar uma função que pode ter uma lista de, por exemplo, ints ou strings.