Golang URL解析
时间:2022-05-06
本文章向大家介绍Golang URL解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今天利用课余时间看了一下Go语言的URL解析,于是就实践了一下,为了大家一起学习交流,故贴出来和大家一起分享,如有什么错误,请各位大神批评指出,共同进步。
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
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 关于把本地应用封装成windows app发布审核通不过的问题
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- 解决WordPress缩略图插件timthumb不支持站外图片的问题
- 让 http 2来得更猛烈些吧
- SQL Server 2008基于策略的管理
- centos系统安装Python
- rpc框架之 thrift连接池实现
- .NET Core全新路线图
- jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
- WordPress自定义栏目运用实例II:添加文章Meta标签(keywords /description)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis性能指标监控!你知几何?
- Rust FFI 编程 - Bindgen 工具介绍
- synchronized的实现原理——锁膨胀过程
- 大点干!早点散----------rsync+inotify实现远程实时同步
- 听说MongoDB你很豪横?-------------MongoDB数据库基础详解
- 听说MongoDB你很豪横?-------------MongoDB 部署分片群集以及管理分片
- SAP Spartacus和product相关的标准normalizer
- 【Rust 日报】2020-09-09 引入“auditable”
- 听说MongoDB你很豪横?-------------MongoDB复制集以及管理优化
- 听说Memcache你很豪横?-------------深入剖析Memcache 安装及管理数据库操作
- 听说Memcache你很豪横?-------------深入剖析Memcache+keepalive高可用群集
- 排障集锦:九九八十一难之第十四难!------------- 安装magent时make编译报错
- 【Rust日报】2020-09-06 Evil_DLL 用来测试注入方法的DLL
- 【Rust日报】2020-09-05 微软在c++静态分析工具实现了一些rust的安全规则
- 一起来玩玩WebGL