Avatar ·

Cómo inicializar un map en Go de manera elegante y correcta: ¿make o literal?

¡Hola a todos! Acabo de empezar a aprender Go y me encontré con una falta de comprensión en una pregunta aparentemente simple. ¿Cómo inicializar correctamente un map (diccionario)? Veo diferentes opciones en el código y no puedo entender cuál se considera "correcta" o "elegante" desde el punto de vista de la comunidad de Go. Por ejemplo, puedo declarar un map así:
var m map[string]int
Pero si intento escribir un valor inmediatamente después de la declaración:
m["key"] = 10 // panic: assignment to entry in nil map
¡obtengo un panic! Resulta que el map necesita ser inicializado. Conozco dos formas de hacerlo: 1. A través de la función make:
m := make(map[string]int)
m["key"] = 10
2. A través de un literal (vacío o con datos):
m := map[string]int{}
m["key"] = 10
// o directamente
m2 := map[string]int{"key": 10}
Ambos funcionan. Pero, ¿cuál es mejor? ¿Hay alguna diferencia en el rendimiento? ¿Cuándo se debe usar un método y cuándo el otro? ¿Y por qué?