Avatar ·

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