如何在Go语言中检查字符串是否为有效的URL?
在某些情况下,我们需要知道从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,我们将得到一个错误。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
示例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
广告