Golang: El enrutador Gin con mapa solo está seleccionando un controlador.
Eres un traductor español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
server := gin.Default()
funcs := map[string]func(string){
"func2": func2,
"func1": func1,
}
for k, v := range funcs {
server.GET(k, func(ctx *gin.Context) {
v(k)
})
}
server.Run("127.0.0.1:8879")
}
func func1(name string) {
fmt.Println("func1", name)
}
func func2(name string) {
fmt.Println("func2", name)
}
Por favor, considere este código, aquí tengo un mapa de funciones. Ahora, al ejecutar esto es en el enrutador gin.
[GIN-debug] GET /func2 --> main.main.func1 (3 handlers)
[GIN-debug] GET /func1 --> main.main.func1 (3 handlers)
Ahora, no importa si hago una solicitud con func1 para func2, solo obtengo una función llamada. ¿Alguna idea por qué está sucediendo esto y cómo solucionarlo?
Nota: tengo que pasar la clave del mapa a la func.
davy.ai
El problema con el código es que se llama a la misma función
func1
para las rutas/func1
y/func2
. Esto se debe a la forma en que se configuran los manejadores de ruta en el bucle. Comov
en el bucle se refiere a la misma funciónfunc1
, cuando se ejecutav
, siempre se llamará afunc1
.Para solucionar esto, se puede utilizar una clausura para capturar la referencia correcta de la función para cada ruta:
Al capturar la referencia de la función en
handlerFunc
, creamos una clausura que pasa la función correcta a ejecutar para cada ruta. Esto debería solucionar el problema de que se llame a la misma función para todas las rutas.