代码拉取完成,页面将自动刷新
package ginAutoRoute
import (
"github.com/gin-gonic/gin"
"net/http"
"reflect"
"strings"
)
var methods = make(map[string]map[string]reflect.Value)
func AutoRoute(s interface{}) gin.HandlerFunc {
return func(c *gin.Context) {
action := c.Param("action")
realAction := strings.ToLower(action)
rt := reflect.TypeOf(s)
pkgName := rt.String()
v, ok := methods[pkgName][realAction]
if !ok && len(methods[pkgName]) == 0 {
rv := reflect.ValueOf(s)
methods[pkgName] = make(map[string]reflect.Value)
for i := 0; i < rv.NumMethod(); i++ {
fn := rv.Method(i)
ft := rt.Method(i)
methods[pkgName][strings.ToLower(ft.Name)] = fn
}
v, ok = methods[pkgName][realAction]
if !ok && len(methods[pkgName]) > 0 {
http.NotFound(c.Writer, c.Request)
c.Abort()
return
}
} else if !ok && len(methods[pkgName]) > 0 {
http.NotFound(c.Writer, c.Request)
c.Abort()
return
}
arguments := make([]reflect.Value, 1)
arguments[0] = reflect.ValueOf(c) // *gin.Context
v.Call(arguments)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。