如何在Go语言中检查字符串是否为有效的URL?


在某些情况下,我们需要知道从http请求中以字符串形式获取的URL是否有效。在这种情况下,可以使用Go标准库的net/url包提供的两个函数。

示例1

第一个基本案例是检查URL的结构是否良好且有效,为此,我们可以使用URL包的ParseRequestURI()函数。

请考虑以下代码。

Open Compiler
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

请考虑以下代码。

Open Compiler
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

更新于:2021年11月1日

4K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告