如何使用 Go 獲取 URL 的參數,以及使用時的問題

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 {...
}

希望能幫到有需要的人~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中函數式接口、Stream流、方法引用、junit單元測試、反射、注解

函數式接口: 在java中有且僅有一個抽象方法的接口稱為函數式接口,但是可以包含其它的默認的或靜態的方法。 格式: 修飾符 interface 接口名稱 {public abstract 返回值類型 方法名稱(可選參數);// 其他非抽象方法 }函數式接口:…

服務器安全維護注意事項有哪些?

服務器的安全關系著公司整個網絡以及所有數據的安全,我們該如何做好服務器后續的安全維護呢?河南億恩科技股份有限公司,專注服務器托管23年,不僅是國內專業的互聯網基礎應用服務提供商之一,還是國家工信部認定的綜合電信服務運營…

OpenJDK Maven 編譯出錯: package jdk.nashorn.internal.runtime.logging does not exist

前言 OpenJDK 1.8.0Maven 3.8.5TencentOS Server 3.1 錯誤信息 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project tour-common: Compilation failure: Compilation failure: [ERROR] /opt/tour-c…

JavaScript預編譯機制

變量預編譯 任何變量,如果未經聲明就賦值,此變量是屬于 window 的屬性,而且不會做變量提升,無論在哪個作用域內賦值。比如說直接寫 console.log(a)肯定會報錯,提示找不到 a。但如果直接寫 a 100就不會報錯&#xff0…

【Linux命令行與Shell腳本編程】第十九章 正則表達式

Linux命令行與Shell腳本編程 第十九章 正則表達式 文章目錄 Linux命令行與Shell腳本編程 第十九章 正則表達式九.正則表達式9.1.正則表達式基礎9.1.1.正則表達式的類型9.2.定義BRE模式9.2.1.普通文本9.2.2.特殊字符 9.2.3.錨點字符錨定行首^錨定行尾$組合錨點 9.2.4.點號字符\.…

funbox3靶場滲透筆記

funbox3靶場滲透筆記 靶機地址 https://download.vulnhub.com/funbox/Funbox3.ova 信息收集 fscan找主機ip192.168.177.199 .\fscan64.exe -h 192.168.177.0/24___ _/ _ \ ___ ___ _ __ __ _ ___| | __/ /_\/____/ __|/ __| __/ _ |/ …

SpringBoot復習(39)Servlet容器的自動配置原理

Servlet容器自動配置類為ServletWebServerFactoryAutoConfiguration 可以看到通過Import注解導入了三個配置類: 通過這個這三個配置類可以看出,它們都使用了ConditionalOnClass注解,當類路徑存在tomcat相關的類時,會配置一個T…

【數據結構?堆】序列和的前n小元素

題目描述 問題&#xff1a;序列和的前n小元素   給出兩個長度為n的有序表A和B, 在A和B中各任取一個, 可以得到 n^2 個和. 求這些和最小的n個。 輸入輸出格式 輸入格式&#xff1a; 輸入數據共三行。   第一行&#xff0c;一個整數值n &#xff08; n < 10^4 &#xff…

Linux系列:從0到1用Docker部署springboot項目

目錄 1.前提條件 2.編寫DockerFile鏡像文件 3.打包SpringBoot項目 4.通過軟件Xftp進行傳輸&#xff08;*&#xff09; 1.點擊“文件-新建”?編輯 5.操作遠程主機 1.docker構建 2.容器運行 6.容器的關閉和刪除 1.前提條件 Linux、docker、xftp的安裝、一臺可以訪問的遠…

教雅川學纏論07-中樞實戰眾泰汽車000980

本文實戰眾泰汽車 下面是2023年11月14-2023年8月8眾泰汽車日K圖 先畫日K 接下來處理包含&#xff0c;就變成下面這個樣子 下面在套上纏論的理論&#xff0c;未來股價的走勢應該是紅色橢圓形虛線里面的樣子 好了&#xff0c;文章就到這里&#xff0c;如果眾泰最終不是這個走勢…

linux 目錄操作命令

目錄操作命令 文件列表 ls命令文件列表 ls [選項] [參數]-------------------------------l 詳細信息-L 緊接著符號性連接&#xff0c;列出它們指向的文件-a 所有文件&#xff0c;包含隱藏文件(以點號起始的文件)-A 與-a相同&#xff0c;但是不會列出來. 和 ..-c 根據創建時間排…

IDEA部署配置Maven項目教程,IDEA配置Tomcat(2019.3.3)

一、前言 當涉及到軟件開發和項目管理時&#xff0c;使用一個可靠的構建工具是非常重要的。Maven是一個廣泛使用的構建工具&#xff0c;它為Java項目提供了一種簡化的構建過程和依賴管理。 在本文中&#xff0c;我們將探討如何部署Maven并開始使用它來構建您的項目。我們將介紹…

Java基礎篇--淺拷貝和深拷貝

概念 淺拷貝&#xff08;Shallow Copy&#xff09;和深拷貝&#xff08;Deep Copy&#xff09;是在對象復制過程中常用的概念。 淺拷貝是指創建一個新對象&#xff0c;并將原始對象的非靜態字段的值拷貝到新對象中。如果字段是基本數據類型&#xff0c;直接復制其值&#xf…

開源數據庫Mysql_DBA運維實戰 (修改root密碼)

MySQL——修改root密碼的4種方法 本文以windows為例為大家詳細介紹下MySQL修改root密碼的4種方法&#xff0c;大家可以可以根據的自己的情況自由選擇&#xff0c;希望對大家有所幫助 方法1&#xff1a; 用SET PASSWORD命令 首先登錄MySQL。 格式&#xff1a;mysql> set pass…

Android APK體積優化(瘦身)

1、基礎知識&#xff1a; 1.1 apk結構 lib &#xff1a;存放so文件&#xff0c;對應不同的cpu架構 res &#xff1a;資源文件&#xff0c;layout、drawable等&#xff0c;經過aapt編譯 assets &#xff1a;資源文件&#xff0c;不經過aapt編譯 classes.dex &#xff1a;dx編譯…

爬蟲:使用Selenium模擬人工操作及獲取網頁內容

專欄介紹 結合自身經驗和內部資料總結的Python教程,每天3-5章,最短1個月就能全方位的完成Python的學習并進行實戰開發,學完了定能成為大佬!加油吧!卷起來! 全部文章請訪問專欄:《Python全棧教程(0基礎)》 再推薦一下最近熱更的:《大廠測試高頻面試題詳解》 該專欄對…

graphab 教程 ——生成廊道

Graphab軟件包括圖譜創建、基于圖譜的連通性計算、分析與推廣、制圖四個模塊。Graphab軟件的圖譜創建基于柵格數據進行,包括斑塊識別和連接建立兩個步驟。Graphab 軟件可識別的柵格數據格式包括TIFF、ASCI和RST,柵格像元記錄數值用于識別斑塊類型,識別規則可以選擇四鄰域或八鄰…

2-redis單節點搭建安裝

1.系統要求 本次redis四種模式(單機(standalone)模式、主從(master-slave)模式、哨兵(sentinel)模式、集群(cluster)模式)的搭建,以CentOS服務器進行。 類型版本CentOS7.9Redis7.0.121.1.OS基礎配置 CentOS為了能夠正常安裝redis,需要對CentOS進行常規的一些基礎配置,主要…

【Zabbix安裝-5.5版本】

Zabbix安裝&#xff08;rpm包安裝&#xff09; Index of /zabbix/zabbix/5.5/rhel/8/x86_64/ | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror rpm包鏈接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.e…

Unity3d C#利用本地網頁快速打開螢石云監控視頻流(ezopen)實現云臺,聲音等控制,支持WebGL平臺,替代UMP播放(含源碼)

前言 之前我介紹了替代Universal?Media?PlayerUMP播放石云監控視頻流(ezopen)的功能&#xff0c;效果還是很明顯的&#xff0c;筆者的測試是差不多3-5秒就能打開監控畫面&#xff0c;不過稍微遺憾的是&#xff0c;之前的功能是iframe打開石云提供的播放網頁的形式&#xff0…