Avatar ·

Cómo obtener un slice de claves de un map en Go: guía completa

¡Hola a todos! Empecé a estudiar Go recientemente y me encontré con un problema que parece elemental, pero no encuentro una solución elegante.

Tengo un map con datos de usuarios:

users := map[int]string{
    1: "Alice",
    2: "Bob",
    3: "Charlie",
    4: "Diana",
}

Necesito obtener una lista de todos los IDs de usuarios (claves) como un slice []int. En Python simplemente escribiría list(users.keys()), pero en Go no existe una función tan simple.

Intenté hacerlo así:

var keys []int
for key := range users {
    keys = append(keys, key)
}

Esto funciona, pero me parece demasiado verboso. ¿Quizás hay una función incorporada o una forma más idiomática? En particular, me preocupa:

  • El orden de las claves: ¿siempre es aleatorio?
  • ¿Qué hacer con maps grandes (millones de entradas)?
  • ¿Se puede hacer en una sola línea?

Agradecería ejemplos