当前位置: 首页 > article >正文

【go从零单排】URL Parsing(URL解析)

挪威特罗姆瑟夜景

🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。

📗概念

在 Go 语言中,URL 解析主要通过 net/url 包来实现。这个包提供了丰富的功能来解析、构建和处理 URL。

💻代码

package main

//net:提供网络相关的功能,主要用于处理主机和端口。
import (
	"fmt"
	"net"
	"net/url" //net/url:用于解析和处理 URL。
)

func main() {
	//定义连接字符串:这是一个 PostgreSQL 数据库的连接字符串,包含了协议、用户名、密码、主机、端口、路径和查询参数。
	s := "postgres://user:pass@host.com:5432/path?k=v#f"
	//url.Parse(s) 将字符串 s 解析为一个 *url.URL 类型的结构。如果解析失败,则会触发 panic。
	u, err := url.Parse(s)
	if err != nil {
		panic(err)
	}
	//u.Scheme 返回 URL 的协议部分,输出将是 postgres。
	fmt.Println(u.Scheme)
	//u.User 返回用户名和密码的结构体。
	fmt.Println(u.User)
	//u.User.Username() 返回用户名部分,输出将是 user。
	fmt.Println(u.User.Username())
	//u.User.Username() 返回用户名部分,输出将是 user。
	p, _ := u.User.Password()
	fmt.Println(p)
	//u.Host 返回主机和端口的组合,输出将是 host.com:5432。
	fmt.Println(u.Host)
	host, port, _ := net.SplitHostPort(u.Host)
	//net.SplitHostPort(u.Host) 将主机和端口分开,host 和 port 分别为 host.com 和 5432。
	fmt.Println(host)
	fmt.Println(port)
	//u.Path 返回 URL 的路径部分,输出将是 /path。
	fmt.Println(u.Path)
	//u.Fragment 返回 URL 的片段部分,输出将是 f。
	fmt.Println(u.Fragment)
	//u.RawQuery 返回未解析的查询字符串,输出将是 k=v。
	fmt.Println(u.RawQuery)
	//url.ParseQuery(u.RawQuery) 将原始查询字符串解析为一个键值对的映射(map[string][]string)。
	m, _ := url.ParseQuery(u.RawQuery)
	//fmt.Println(m) 输出解析后的映射,结果为 map[k:[v]]。
	fmt.Println(m)
	//fmt.Println(m["k"][0]) 输出查询参数 k 的第一个值,输出将是 v。
	fmt.Println(m["k"][0])
}

//输出
//postgres
//user:pass
//user
//pass
//host.com:5432
//host.com
//5432
///path
//f
//k=v
//map[k:[v]]
//v

🔍理解

  • 使用 url.Parse 函数来解析 URL 字符串。该函数返回一个 *url.URL 类型的结构体和一个错误值。

  • 解析后的 *url.URL 结构体包含多个字段,可以方便地访问 URL 的各个部分:

    • Scheme:协议(如 http, https, ftp 等)
    • User:用户信息(包含用户名和密码)
    • Host:主机和端口
    • Path:路径
    • RawQuery:原始查询字符串
    • Fragment:片段标识符

💪无人扶我青云志,我自踏雪至山巅。
在这里插入图片描述


http://www.kler.cn/a/395356.html

相关文章:

  • vue3+elementplus+虚拟树el-tree-v2+多条件筛选过滤filter-method
  • Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
  • 基于yolov8、yolov5的鱼类检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 基于 Python Django 的二手房间可视化系统分析
  • 01:(手撸HAL+CubeMX)时钟篇
  • SHELL脚本(Linux)
  • PyEcharts | 通过分析奥迪车购买数据来学习柱状折线复合图像的绘制方法
  • 风险数据集市整体架构及技术实现
  • 深度学习知识点1--编码器与解码器
  • 怎样在软件设计中选择使用GOF设计模式
  • 前端笔试中oj算法题的解法模版
  • Git - 命令杂谈 - fetch与push
  • 13 字母异位词分组
  • 第12课 二维数组(1)
  • Springboot配置全局异常通用返回
  • 电子工牌独立双通道定向拾音方案(有视频演示)
  • qt里面的ui文件和c++的关系
  • Elasticsearch 重建索引数据迁移
  • 智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁
  • 【机器学习】特征工程、降维与超参数调优:提升机器学习模型表现的三大核心技术
  • 点云论文阅读-1-pointnet++
  • HTTP —— OSI七层模型
  • 深度学习之 LSTM
  • MACA-PEG-NHS中PEG链段能够增加修饰后材料的溶解度和稳定性
  • 无人机飞手在保家卫国上重要性技术详解
  • 如何使用谷歌浏览器阅读网页内容