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