Avatar ·

Como obter um slice de chaves de um map em Go: guia completo

Olá a todos! Comecei a estudar Go recentemente e me deparei com um problema que parece elementar, mas não consigo encontrar uma solução elegante.

\n\n

Eu tenho um map com dados de usuários:

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

Preciso obter uma lista de todos os IDs de usuários (chaves) como um slice []int. Em Python, eu simplesmente escreveria list(users.keys()), mas em Go não existe uma função tão simples assim.

\n\n

Tentei fazer assim:

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

Isso funciona, mas parece muito verboso. Talvez exista uma função embutida ou uma maneira mais idiomática? Especialmente me preocupa: