如何检查字符串是否是 Golang 中的有效 URL?

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

示例 1

第一个基本情况是检查 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,我们将收到错误消息。

示例 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