如何在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,我們將得到一個錯誤。

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

更新於:2021年11月1日

4K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告