如何在 Golang 中检查字符串是否为有效 URL?
go programmingserver side programmingprogramming更新于 2025/4/10 18:07:17
在某些情况下,我们想知道从 http 请求中以字符串形式获取的 URL 是否有效。在这种情况下,可以使用 Go 标准库的 net/url 包提供的两个函数。
示例 1
第一个基本情况是检查 URL 是否结构良好且有效,为此,我们可以使用 URL 包的 ParseRequestURI() 函数。
考虑下面显示的代码。
package main import ( "fmt" "net/url" ) func main() { u, err := url.ParseRequestURI("http://golangcode.com") if err != nil { panic(err) } fmt.Println(u) }
输出
如果我们在上述代码上运行命令 go run main.go,那么我们将在终端中获得以下输出。
http://golangcode.com
在上面的代码中,我们传递了一个带有主机和方案的有效 URL,如果我们将其更改为无效的 URL,我们将收到错误。
示例 2
考虑下面显示的代码。
package main import ( "fmt" "net/url" ) func main() { u, err := url.ParseRequestURI("golangcode.com") if err != nil { panic(err) } fmt.Println(u) }
输出
如果我们在上述代码上运行命令 go run main.go,那么我们将在终端中获得以下输出。
panic: parse "golangcode.com": invalid URI for request
使用 ParseRequestURI() 时有一个问题,即它认为 URL 是在 HTTP 请求中收到的,这可能会导致一些不一致。
如果我们将 "Test:Test" 字符串作为参数传递给 ParseRequestURI() 函数,那么它不会产生任何错误。因此,更好的选择是使用 Parse 函数以及 ParseRequestURI()。
示例 3
考虑下面显示的代码。
package main import ( "fmt" "net/url" ) func main() { _, err := url.ParseRequestURI("http://www.google.com") if err != nil { panic(err) } u, err := url.Parse("http://www.google.com") if err != nil || u.Scheme == "" || u.Host == "" { panic(err) } fmt.Println("All ok") }
输出
如果我们在上面的代码上运行命令go run main.go,那么我们将在终端中得到以下输出。
All Ok