为了账号安全,请及时绑定邮箱和手机立即绑定

如何解析 /id/123 格式的 URL 而不是 ?foo=bar

如何解析 /id/123 格式的 URL 而不是 ?foo=bar

Go
ABOUTYOU 2021-11-01 15:21:49
我正在尝试解析如下 URL:http://example.com/id/123我已经通读了net/url文档,但它似乎只解析字符串http://example.com/blah?id=123我如何解析 ID 以便最终得到第一个示例中的 id 值?这不是我自己的路由之一,而是从 openid 请求返回的 http 字符串。
查看完整描述

3 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这是一个简单的解决方案,适用于与您具有相同结构的 URL(您可以改进以适应具有其他结构的 URL)


package main


import (

       "fmt"

       "net/url"

)


var path = "http://localhost:8080/id/123"


func getFirstParam(path string) (ps string) {


     // ignore first '/' and when it hits the second '/'

     // get whatever is after it as a parameter

     for i := 1; i < len(path); i++ {

         if path[i] == '/' {

            ps = path[i+1:]

         }

     }

     return

}


func main() {


     u, _ := url.Parse(path)

     fmt.Println(u.Path)                // -> "/id/123"


     fmt.Println(getFirstParam(u.Path)) // -> "123"

}

或者,正如@gollipher 建议的那样,使用path包


import "path"


func main() {

    u, _ := url.Parse(path)

    ps := path.Base(u.Path)

}

使用这种方法它比正则表达式更快,前提是您事先知道您获得的 URL 的结构。


查看完整回答
反对 回复 2021-11-01
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

您可以尝试使用正则表达式如下:


import "regexp"


re, _ := regexp.Compile("/id/(.*)")

values := re.FindStringSubmatch(path)

if len(values) > 0 {

    fmt.Println("ID : ", values[1])

}


查看完整回答
反对 回复 2021-11-01
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信