前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang URL解析

Golang URL解析

作者头像
李海彬
发布2018-03-27 11:16:26
6.4K0
发布2018-03-27 11:16:26
举报
文章被收录于专栏:Golang语言社区
Golang URL解析

今天利用课余时间看了一下Go语言的URL解析,于是就实践了一下,为了大家一起学习交流,故贴出来和大家一起分享,如有什么错误,请各位大神批评指出,共同进步。

代码语言:javascript
复制
package main
import (
        "fmt"
        "net/url"
        "strings"
)
func main() {
        Url := "https://root:123456@www.baidu.com:0000/login?name=xiaoming&name=xiaoqing&age=24&age1=23#fffffff"
        //Parse函数解析Url为一个URL结构体,Url可以是绝对地址,也可以是相对地址
        //        type URL struct {
        //    Scheme   string
        //    Opaque   string    // 编码后的不透明数据
        //    User     *Userinfo // 用户名和密码信息
        //    Host     string    // host或host:port
        //    Path     string
        //    RawQuery string // 编码后的查询字符串,没有'?'
        //    Fragment string // 引用的片段(文档位置),没有'#'
        //}
        u, err := url.Parse(Url)
        if err == nil {
                fmt.Println(u)
        }
        //ParseRequestURI函数解析Url为一个URL结构体,本函数会假设Url是在一个HTTP请求里,
        //        因此会假设该参数是一个绝对URL或者绝对路径,并会假设该URL没有#fragment后缀
        u1, err := url.ParseRequestURI(Url)
        if err == nil {
                fmt.Println(u1)
        }
        //得到Scheme
        fmt.Println(u.Scheme)
        //User 包含认证信息 username and password
        user := u.User
        fmt.Println(user)
        username := user.Username()
        fmt.Println(username)
        password, b := user.Password()
        fmt.Println(password, b)
        ////Host 包括主机名和端口信息,如过有端口,用strings.Split() 从Host中手动提取端口
        host := u.Host
        fmt.Println(host)
        ho := strings.Split(host, ":")
        fmt.Println("主机名:", ho[0])
        fmt.Println("端口号:", ho[1])
        //获取path
        path := u.Path
        fmt.Println(path)
        //获取参数 将查询参数解析为一个map。 map以查询字符串为键,对应值字符串切片为值。
        fmt.Println(u.RawQuery)
        urlParam := u.RawQuery
        fmt.Println("urlParam:", urlParam)
        m, err := url.ParseQuery(urlParam)
        if err == nil {
                fmt.Println(m)
                for k, v := range m {
                        fmt.Println(k, v)
                }
        }
        fmt.Println("****************************")
        //与ParseQuery功能一样,只是将上边的方法分装了一下
        m1 := u.Query()
        fmt.Println(m1)
        for k, v := range m1 {
                fmt.Println(k, v)
        }
        //得到查询片段信息
        fmt.Println(u.Fragment)
        ////生成参数形如:name=xiaoming&name=xiaoqing&age=24&age1=23
        v := url.Values{}
        //添加一个k-v值
        v.Set("name", "xiaoming")
        v.Add("name", "xiaoqing")
        v.Set("Age", "23")
        fmt.Println(v)
        fmt.Println(v.Get("name"))
        v.Del("name")
        fmt.Println(v)
        //把map编码成name=xiaoming&name=xiaoqing&age=24&age1=23的形式
        v.Set("name", "xiaoming")
        v.Add("name", "xiaoqing")
        fmt.Println(v.Encode())
}
输出结果:
https://root:123456@www.baidu.com:0000/login?name=xiaoming&name=xiaoqing&age=24&age1=23#fffffff
https://root:123456@www.baidu.com:0000/login?name=xiaoming&name=xiaoqing&age=24&age1=23#fffffff
https
root:123456
root
123456 true
www.baidu.com:0000
主机名: www.baidu.com
端口号: 0000
/login
name=xiaoming&name=xiaoqing&age=24&age1=23
urlParam: name=xiaoming&name=xiaoqing&age=24&age1=23
map[name:[xiaoming xiaoqing] age:[24] age1:[23]]
name [xiaoming xiaoqing]
age [24]
age1 [23]
****************************
map[age:[24] age1:[23] name:[xiaoming xiaoqing]]
name [xiaoming xiaoqing]
age [24]
age1 [23]
fffffff
map[name:[xiaoming xiaoqing] Age:[23]]
xiaoming
map[Age:[23]]
Age=23&name=xiaoming&name=xiaoqing
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档