V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
slgz
V2EX  ›  Go 编程语言

beego get 请求参数为啥会自动转小写

  •  
  •   slgz · 2019-12-03 14:27:53 +08:00 · 3190 次点击
    这是一个创建于 1809 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Route:

     beego.ControllerComments{
     Method: "Get",
     Router: `/:userNAME`,
     AllowHTTPMethods: []string{"get"},
     MethodParams: param.Make(),
     Filters: nil,
     Params: nil}
    

    日志:

    aaa=> &{0xc000138fc0 <nil> [:username] [hjkhsbnmn123] map[RouterPattern:/v1/object/:userNAME] {{0 0} 0 0 0 0} []  <nil>}2019/12/03 14:24:28.292 [D] [server.go:2802]  |      127.0.0.1| 200 |      951.8µs|   match| GET      /v1/object/hjkhsbnmn123   r:/v1/object/:userNAME
    
    

    发现,参数竟然被转小写了...

    4 条回复    2019-12-09 00:58:37 +08:00
    nimeizhaopian
        1
    nimeizhaopian  
       2019-12-03 16:55:53 +08:00
    在 route 文件里有个 beego.AutoPrefix()函数,然后

    func (p *ControllerRegister) AddAutoPrefix(prefix string, c ControllerInterface) {
    reflectVal := reflect.ValueOf(c)
    rt := reflectVal.Type()
    ct := reflect.Indirect(reflectVal).Type()
    controllerName := strings.TrimSuffix(ct.Name(), "Controller")
    for i := 0; i < rt.NumMethod(); i++ {
    if !utils.InSlice(rt.Method(i).Name, exceptMethod) {
    route := &ControllerInfo{}
    route.routerType = routerTypeBeego
    route.methods = map[string]string{"*": rt.Method(i).Name}
    route.controllerType = ct
    pattern := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name), "*")
    patternInit := path.Join(prefix, controllerName, rt.Method(i).Name, "*")
    patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name))
    patternFixInit := path.Join(prefix, controllerName, rt.Method(i).Name)
    route.pattern = pattern
    for m := range HTTPMETHOD {
    p.addToRouter(m, pattern, route)
    p.addToRouter(m, patternInit, route)
    p.addToRouter(m, patternFix, route)
    p.addToRouter(m, patternFixInit, route)
    }
    }
    }
    }

    patternFix := path.Join(prefix, strings.ToLower(controllerName), strings.ToLower(rt.Method(i).Name))
    这句话
    slgz
        2
    slgz  
    OP
       2019-12-05 17:47:57 +08:00
    @nimeizhaopian #1 大佬牛批, 新手看半天没看懂
    slgz
        3
    slgz  
    OP
       2019-12-05 17:50:22 +08:00
    @nimeizhaopian #1 感觉有点坑, beego 的文档没找到... 难道 go 圈的人, 都是看源码的吗
    CEBBCAT
        4
    CEBBCAT  
       2019-12-09 00:58:37 +08:00 via Android
    深夜跟楼主撩骚一下,想请问一下这个冬天收不收实习生?用 Go 接过一个客服系统,算法竞赛选手,拿过全国二等奖
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3685 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.