Cómo inicializar correctamente un slice vacío en Go: var s []int vs s := make([]int, 0)?
¡Hola a todos! Empecé a estudiar Go recientemente y me encontré con el problema de inicializar slices vacíos. Parece que hay dos formas populares:
1. `var s []int` — declaración sin inicialización (nil-slice)
2. `s := make([]int, 0)` — inicialización con un slice vacío usando make
He leído que ambas opciones se pueden usar y en algunos casos se comportan igual. Por ejemplo, si hago `fmt.Println(s)`, en ambos casos se imprime `[]`. Pero noté un comportamiento extraño al serializar a JSON. Aquí hay un ejemplo:
```go
package main
import (
"encoding/json"
"fmt"
)
type MyStruct struct {
Items []string
}
func main() {
s1 := MyStruct{}
s2 := MyStruct{Items: []string{}}
json1, _ := json.Marshal(s1)
json2, _ := json.Marshal(s2)
fmt.Println(string(json1)) // {"Items":null}
fmt.Println(string(json2)) // {"Items":[]}
}
```
¿Por qué en un caso se imprime `null` y en el otro un array vacío? Esto es confuso, especialmente cuando trabajo