¿Qué significa interface{} en Go y cómo usarlo correctamente?
¡Hola a todos! Acabo de empezar a aprender Go y me confunde la construcción `interface{}`. La encuentro por todas partes: en funciones, en estructuras de datos, en argumentos.
Por ejemplo, he visto este código:
```go
func PrintAnything(v interface{}) {
fmt.Println(v)
}
func main() {
PrintAnything(42)
PrintAnything("hello")
PrintAnything([]int{1,2,3})
}
```
Entiendo que es una especie de "interfaz vacía", pero no termino de comprender su significado. ¿Resulta que `interface{}` puede almacenar un valor de cualquier tipo? Pero entonces, ¿en qué se diferencia de `Object` en Java o `void*` en C? Y si paso un `interface{}` a una función, ¿cómo recupero el tipo original después?
También veo a menudo declaraciones como `map[string]interface{}` o `[]interface{}`. ¿Significa eso que puedo almacenar en un mismo slice strings, números y estructuras? ¿No provocará problemas en tiempo de ejecución?
Por favor, explíquenme con ejemplos: qué es realmente `interface{}`, para qué sirve y cómo trabajar con él sin dolor.