Golang 如何检查一个字符串是否是一个有效的URL

Golang 如何检查一个字符串是否是一个有效的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

输出

如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。

[http://golangcode.com](https://golangcode.com/)
Go

在上面的代码中,我们传递了一个带有主机和方案的有效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

输出

如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。

panic: parse "golangcode.com": invalid URI for request
Go

在使用 ParseRequestURI() 时有一个问题,那就是它认为URL是在HTTP请求中收到的,这可能导致一些不一致的情况。

如果我们把 “Test:Test “ 字符串作为参数传给 ParseRequestURI() 函数,那么它将不会产生任何错误。因此,一个更好的选择是在使用 ParseRequestURI() 的同时使用 Parse 函数 。

例三

请看下面的代码。

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

输出

如果我们在上述代码上运行命令 go run main.go ,那么我们将在终端得到以下输出。

All Ok
Go

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册