duanliang9288
2015-06-05 09:04
采纳率: 100%
浏览 424
已采纳

Golang:将URL作为GET参数传递

I want to get an URL as a get aparameter

ex: example.com?domain=site.come?a=val&b=val

the problem when i use

query := r.URL.Query()
domain := query.Get("domain") 

to get the domain name it give just domain=site.come?a=val

I think because when the r.URL.Query() meet & it consider it as a new parameter

does anyone know how can I solve this problem

Thank you in advance.

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongtanliefang8765 2015-06-05 09:13
    已采纳

    You need to URL-Encode your query string, like this:

    package main
    
    import (
        "fmt"
        "net/url"
    )
    
    func main() {
        query := make(url.Values)
        query.Add("domain", "example.com?foo=bar")
    
        fmt.Println(query.Encode())
    }
    

    Which outputs domain=example.com%3Ffoo%3Dbar.

    You can set that string as a RawQuery of an url.URL value and if you then access the query like you did, it will have the correct value.

    If the URL is correctly encoded then you should be able to run the following code with your URL value and get the correct result:

    package main
    
    import (
        "fmt"
        "net/url"
    )
    
    func main() {
        query := make(url.Values)
        query.Add("domain", "example.com?foo=bar&abc=123&jkl=qwe")
    
        url := &url.URL{RawQuery: query.Encode(), Host: "domain.com", Scheme: "http"}
        fmt.Println(url.String())
    
        abc := url.Query().Get("domain")
        fmt.Println(abc)
    }
    

    This prints:

    http://domain.com?domain=example.com%3Ffoo%3Dbar%26abc%3D123%26jkl%3Dqwe
    

    (the complete URI with the encoded parameter called "domain")

    example.com?foo=bar&abc=123&jkl=qwe
    

    (the decoded value of said parameter)

    打赏 评论

相关推荐 更多相似问题