Go 獲取 URL 參數也很容易,但是由于 Go 有嚴格的數據類型和錯誤管理,所以在使用時會些微有些復雜。所以本文不僅會講如何獲取 URL 的參數,也會講在使用時的一些問題。
首先假設 URL 是https://www.example.com/?keyword=abc&id=12
。
其他語言一般這個時候就是導入包了,但是 Go 的包管理很嚴格,所以建議你在輸入完下列代碼后,在安裝 VSCode 中使用保存快捷鍵(如 Command + S 鍵)或者在終端中goimports
工具來自動補全包,這樣就可以保證一定沒有錯誤。因為雖然現在一般使用"net/url"
或者"net/http"
,但某些情況可能不一樣,或者未來 Go 會對一些包進行改名,這都會導致包的名稱不一定,所以“授人以魚不如授人以漁”。
接下來需要使用url.Parse()
來解析上面的 URL,以及設置錯誤信息來方便 URL 解析出錯的時候進行處理,最后聲明變量q
來方便后續獲取和操作參數:
u, err := url.Parse("https://www.example.com/?keyword=abc&id=12")
if err != nil {log.Fatal(err)
}
q := u.Query()
這里u.Query()
會進行一個映射,將參數名和值對應上,由于可能會有多個相同的參數名,所以這里的“鍵值對”的“值”是一個字符串數組。此時就可以通過q
來獲取參數了,如下:
fmt.Println(q["keyword"])
fmt.Println(q["id"])
輸出結果為:
[abc]
[12]
下面說說需要注意的幾個問題:
如何將參數字符串轉換成整數
上文提到這里的q["keyword"]
或q["id"]
實際上是個字符串數組,所以如果你想將上面id
的值12
當成整數進行操作,那么就得使用下面的方式(如果你有多個id
參數的話,那么就根據自己情況選擇):
id := strconv.Atoi(q["id"][0])
這時候變量id
的值就是整數12
。
判斷是否有參數或有某個參數
一般參數的使用方法就是用來計算或判斷,但是如果我們要判斷有沒有參數部分或者有沒有某個參數該怎么辦呢?
有兩種方案:
第一種是通過判斷q
或某個參數對應的值是否為空,如下:
//判斷是否有參數
if q != nil {...
}
//判斷是否有id這個參數
if q["id"] != nil {...
}
第二種是通過len()
測量q
或某個參數對應值的長度,如下:
//判斷是否有參數
if len(q) != 0 {...
}
//判斷是否有id這個參數
if len(q["id"]) != 0 {...
}
希望能幫到有需要的人~