Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 如何解析/id/123 not格式的URL?foo=bar_Go - Fatal编程技术网

Go 如何解析/id/123 not格式的URL?foo=bar

Go 如何解析/id/123 not格式的URL?foo=bar,go,Go,我正在尝试解析一个URL,如: 我已经阅读了net/url文档,但它似乎只解析如下字符串 在第一个示例中,我如何解析ID,从而得到ID的值 这不是我自己的路由,而是从openid请求返回的http字符串。您可以尝试使用正则表达式,如下所示: import "regexp" re, _ := regexp.Compile("/id/(.*)") values := re.FindStringSubmatch(path) if len(values) > 0 { fmt.Prin

我正在尝试解析一个URL,如:

我已经阅读了
net/url
文档,但它似乎只解析如下字符串

在第一个示例中,我如何解析ID,从而得到ID的值


这不是我自己的路由,而是从openid请求返回的http字符串。

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

import "regexp"

re, _ := regexp.Compile("/id/(.*)")
values := re.FindStringSubmatch(path)
if len(values) > 0 {
    fmt.Println("ID : ", values[1])
}

在您的示例中/id/123是一个路径,您可以通过使用path模块中的Base来获取“123”部分

package main

import (
    "fmt"
    "path"
)

func main() {
    fmt.Println(path.Base("/id/123"))
}

为便于参考,以下是path模块上的文档

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


如果您事先知道要获取的URL的结构,使用这种方法比正则表达式更快。

您看过gorilla/mux吗?-很容易处理路由参数。更新了我的问题。对不起,我检查了那个包,但它似乎只解析了我文章的第二个示例中的字符串查询,而不是第一个,你能给我一个示例吗?我一定在做什么wrong@Datsik答案已编辑!另外,请查看@gollipher的答案。您可以将
path
包与
url.Parse(path).path一起使用,而不是在此处编写
getFirstParam
函数。不确定为什么会被否决,虽然regexp的运行速度并不快,但这是一个完全有效的答案。这很有用,也很相关,但仅供参考,它还将匹配/id/123/456返回的456,这不是我所期望的。
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"
}
import "path"

func main() {
    u, _ := url.Parse(path)
    ps := path.Base(u.Path)
}