在某些情况下,我们想知道我们从http请求中以字符串形式获得的 URL是否有效。在这种情况下,可以使用Go 标准库的net/url包提供的两个函数。
第一个基本情况是检查 URL 是否结构良好且有效,为此,我们可以使用ParseRequestURI()URL 包的功能。
考虑下面显示的代码。
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,我们将收到错误消息。
考虑下面显示的代码。
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().
考虑下面显示的代码。
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