如何在 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

相关文章