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)
}
請考慮這段代碼,這里我有一個函式映射。現在運行時這是 gin 路由器。
[GIN-debug] GET /func2 --> main.main.func1 (3 handlers)
[GIN-debug] GET /func1 --> main.main.func1 (3 handlers)
現在,無論是否使用 func1 為 func2 發出請求,我都只呼叫了一個函式。任何想法,為什么會發生這種情況以及如何解決這個問題。
注意:我必須將密鑰從 map 傳遞給 func
uj5u.com熱心網友回復:
回圈變數在每次迭代覆寫,使所有處理程式使用的最后一個副本v和k。您可以通過創建副本來修復:
for k, v := range funcs {
k:=k
v:=v
server.GET(k, func(ctx *gin.Context) {
v(k)
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/365981.html
