Tengo curiosidad por qué Go no se convierte implícitamente []T
a []interface{}
cuándo se convertirá implícitamente T
a interface{}
. ¿Hay algo no trivial en esta conversión que me estoy perdiendo?
Ejemplo:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
go build
se queja
no puede usar una (cadena de tipo []) como interfaz de tipo [] {} en el argumento de la función
Y si trato de hacerlo explícitamente, lo mismo: se b := []interface{}(a)
queja
no puede convertir una (cadena de tipo []) a la interfaz de tipo [] {}
Entonces, cada vez que necesito hacer esta conversión (que parece surgir mucho), he estado haciendo algo como esto:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
¿Hay una mejor manera de hacer esto, o funciones de biblioteca estándar para ayudar con estas conversiones? Parece un poco tonto escribir 4 líneas adicionales de código cada vez que quiero llamar a una función que puede tomar una lista de, por ejemplo, ints o cadenas.