drl6054 2015-05-27 06:03 采纳率: 0%
浏览 2344
已采纳

如何在Golang中使用正则表达式获取url模式?

How to use regular expression matching URL, which does decide to use the corresponding function processing

package main

import(
  "fmt"
  "net/http"
)

func main() {
  http.HandleFunc("/pattern", resolve)
  http.ListenAndServe(":8080", nil)
}

func resolve(w http.ResponseWriter, r * http.Request) {
  fmt.Println(r.URL.Host)
}
  • 写回答

3条回答 默认 最新

  • dousendun8411 2015-05-27 06:27
    关注

    http.HandleFunc() can not be used to register a pattern to match a regular expression. In short, the pattern specified at HandleFunc() can match a fixed, rooted path (like /favico.ico) or rooted subtrees (like /images/), longer patterns take precedence over shorter ones. You can find more details at the doc of the ServeMux type.

    What you can do is register your handler to a rooted subtree which may be everything with the / pattern, and inside your handler you can do further regexp matching and routing.

    For example:

    func main() {
        http.HandleFunc("/", route) // Match everything
        http.ListenAndServe(":8080", nil)
    }
    
    var rNum = regexp.MustCompile(`\d`)  // Has digit(s)
    var rAbc = regexp.MustCompile(`abc`) // Contains "abc"
    
    func route(w http.ResponseWriter, r *http.Request) {
        switch {
        case rNum.MatchString(r.URL.Path):
            digits(w, r)
        case rAbc.MatchString(r.URL.Path):
            abc(w, r)
        default:
            w.Write([]byte("Unknown Pattern"))
        }
    }
    
    func digits(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Has digits"))
    }
    
    func abc(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Has abc"))
    }
    

    Or use an external library like Gorilla MUX.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 vmware exsi重置后的密码
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面