Go 语言入门很简单:net/url 包(下)

简介: 在 Golang 中,将 URL 打包用于从服务器获取数据非常重要。只需了解您是否正在处理任何应用程序并且您想从任何外部位置或服务器获取此应用程序的数据,都需要我们可以使用 URL。

在 Golang 中解析 URL

package main
import (
  "fmt"
  "log"
  "net/url"
)
func TestURL() {
  URL, err := url.Parse("http://bing.com/good%2bad")
  fmt.Println("Url before modification is", URL)
  if err != nil {
    log.Fatal("An error occurs while handling url", err)
  }
  fmt.Println("The URL path is", URL.Path)
  fmt.Println("The URL raw path is", URL.RawPath)
  fmt.Println("The URL is ", URL.String())
}
func main() {
  TestURL()
}

运行代码:

$ go run main.go
Url before modification is http://bing.com/good%2bad
The URL path is /good+ad
The URL raw path is /good%2bad
The URL is  http://bing.com/good%2bad


处理相对路径

package main
import (
  "fmt"
  "log"
  "net/url"
)
func ExampleURL() {
  URL, error := url.Parse("../../..//search?q=php")
  fmt.Println("Url before modification is", URL)
  if error != nil {
    log.Fatal("An error occurs while handling url", error)
  }
  baseURL, err := url.Parse("http://example.com/directory/")
  if err != nil {
    log.Fatal("An error occurs while handling url", err)
  }
  fmt.Println(baseURL.ResolveReference(URL))
}
func main() {
  ExampleURL()
}
$ go run main.go
Url before modification is ../../..//search?q=php
http://example.com/search?q=php

解析空格

package main
import (
  "fmt"
  "log"
  "net/url"
)
func ExampleURL() {
  URL, error := url.Parse("http://example.com/Here path with space")
  if error != nil {
    log.Fatal("An error occurs while handling url", error)
  }
  fmt.Println("The Url is", URL)
}
func main() {
  ExampleURL()
}

运行结果:

$ go run main.go
The Url is http://example.com/Here%20path%20with%20space


判断绝对地址

package main
import (
  "fmt"
  "net/url"
)
func main() {
  u := url.URL{Host: "example.com", Path: "foo"}
  fmt.Println("The Url is", u.IsAbs())
  u.Scheme = "http"
  fmt.Println("The Url is", u.IsAbs())
}
$ go run main.go
The Url is false
The Url is true


解析端口

package main
import (
  "fmt"
  "log"
  "net/url"
)
func ExampleURL() {
  URL1, error := url.Parse("https://example.org")
  fmt.Println("URL1 before modification is", URL1)
  if error != nil {
    log.Fatal("An error occurs while handling url", error)
  }
  URL2, err := url.Parse("https://example.org:8080")
  if err != nil {
    log.Fatal("An error occurs while handling url", URL2)
  }
  fmt.Println("URL2 before modification is", URL2)
  fmt.Println("URL2 Port number is", URL2.Port())
}
func main() {
  ExampleURL()
}
$ go run main.go
URL1 before modification is https://example.org
URL2 before modification is https://example.org:8080
URL2 Port number is 8080


总结

从本教程中,我们了解了 go url 包 的基本概念,并了解了 url 的概念语法。并逐渐展示了 url 的部分功能以及 url 的主要用途,希望读者可以在官方文档中学习其他方法。


相关文章
|
Go 开发者
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
513 61
|
9月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
432 4
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
725 63
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
11月前
|
缓存 监控 安全
告别缓存击穿!Go 语言中的防并发神器:singleflight 包深度解析
在高并发场景中,多个请求同时访问同一资源易导致缓存击穿、数据库压力过大。Go 语言提供的 `singleflight` 包可将相同 key 的请求合并,仅执行一次实际操作,其余请求共享结果,有效降低系统负载。本文详解其原理、实现及典型应用场景,并附示例代码,助你掌握高并发优化技巧。
776 0
|
Go 持续交付 开发者
Go语言包与模块(module)的基本使用-《Go语言实战指南》
本章深入讲解Go语言中的包(Package)和模块(Module)概念。包是代码组织的最小单位,每个`.go`文件属于一个包,通过`import`实现复用;主程序包需命名为`main`。模块是Go 1.11引入的依赖管理机制,支持自动版本管理和私有/远程仓库,无需依赖GOPATH。通过实际示例,如自定义包`mathutil`和第三方模块`gin`的引入,展示其使用方法。常用命令包括`go mod init`、`go mod tidy`等,帮助开发者高效管理项目依赖。最后总结,包负责功能划分,模块实现现代化依赖管理,提升团队协作效率。
513 15
【Go语言入门100题】026 I Love GPLT (5 分) Go语言 | Golang
L1-026 I Love GPLT (5 分) Go语言|Golang 这道超级简单的题目没有任何输入。 你只需要把这句很重要的话 —— “I Love GPLT”——竖着输出就可以了。 所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字符和回车。
797 0
|
存储 Go
【Go语言入门100题】023 输出GPLT (20 分) Go语言 | Golang
L1-023 输出GPLT (20 分) Go语言|Golang 给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。 下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。
285 0
|
9月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
433 2
|
11月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
655 1

热门文章

最新文章