जवाबों:
परिभाषा में, URL में एक QueryString है । आप req.URL
( doc ) का उपयोग करके अनुरोध के URL तक पहुँच सकते हैं । URL ऑब्जेक्ट में एक Query()
विधि ( डॉक ) है जो एक Values
प्रकार का रिटर्न देता है , जो कि केवल map[string][]string
QueryString मापदंडों का है।
यदि आप जिस चीज की तलाश कर रहे हैं वह HTML फॉर्म के द्वारा प्रस्तुत किया गया POST डेटा है , तो यह (आमतौर पर) अनुरोध बॉडी में एक महत्वपूर्ण-मूल्य वाला जोड़ा है। आप अपने उत्तर में सही हैं कि आप कॉल कर सकते हैं ParseForm()
और फिर req.Form
कुंजी-मूल्य जोड़े के मानचित्र को प्राप्त करने के लिए फ़ील्ड का उपयोग कर सकते हैं, लेकिन आप FormValue(key)
किसी विशिष्ट कुंजी का मान प्राप्त करने के लिए भी कॉल कर सकते हैं । ParseForm()
यदि आवश्यक हो तो यह कॉल करता है, और मानों की परवाह किए बिना कि उन्हें कैसे भेजा गया था (यानी क्वेरी स्ट्रिंग या अनुरोध निकाय में)।
req.URL.RawQuery
?
एक GET अनुरोध पर सब कुछ देता है , अगर वह मदद करता है।
जीईटी मापदंडों का उपयोग कैसे करें, इसका अधिक ठोस उदाहरण यहां दिया गया है। Request
वस्तु एक विधि है जो उनके लिए आप बुलाया बाहर पार्स करता है क्वेरी :
Http: // host: port / something; जैसे अनुरोध URL को मान लें ? Param1 = b
func newHandler(w http.ResponseWriter, r *http.Request) {
fmt.Println("GET params were:", r.URL.Query())
// if only one expected
param1 := r.URL.Query().Get("param1")
if param1 != "" {
// ... process it, will be the first (only) if multiple were given
// note: if they pass in like ?param1=¶m2= param1 will also be "" :|
}
// if multiples possible, or to process empty values like param1 in
// ?param1=¶m2=something
param1s := r.URL.Query()["param1"]
if len(param1s) > 0 {
// ... process them ... or you could just iterate over them without a check
// this way you can also tell if they passed in the parameter as the empty string
// it will be an element of the array that is the empty string
}
}
यह भी ध्यान दें कि "मान मानचित्र में कुंजियाँ [यानी क्वेरी () वापसी मान] केस-संवेदी हैं।"
r.URL.Query().Get("moviename")
इस घातक गलती से बचने के लिए उपयोग करें)।
Get
विधि का उपयोग केवल पहले देता है अगर कई हैं, तो यह अधिक का एक उदाहरण है। उपयोगी जानकारी, धन्यवाद!
Values.Get()
साथ लौटती है nil
। golang.org/pkg/net/url/#Values
नीचे एक उदाहरण है:
value := r.FormValue("field")
अधिक जानकारी के लिए। http पैकेज के बारे में, आप इसके प्रलेखन पर जा सकते हैं । FormValue
मूल रूप से POST या PUT मान, या GET मान लौटाता है, उस क्रम में, जो पहले मिल जाता है।
यहाँ एक सरल, काम करने का उदाहरण दिया गया है:
package main
import (
"io"
"net/http"
)
func queryParamDisplayHandler(res http.ResponseWriter, req *http.Request) {
io.WriteString(res, "name: "+req.FormValue("name"))
io.WriteString(res, "\nphone: "+req.FormValue("phone"))
}
func main() {
http.HandleFunc("/example", func(res http.ResponseWriter, req *http.Request) {
queryParamDisplayHandler(res, req)
})
println("Enter this in your browser: http://localhost:8080/example?name=jenny&phone=867-5309")
http.ListenAndServe(":8080", nil)
}
क्वेरी परम प्राप्त करने के दो तरीके हैं:
दूसरे मामले में किसी को सावधान रहना होगा क्योंकि बॉडी पैरामीटर क्वेरी पैरामीटर पर पूर्वता लेंगे। क्वेरी परम प्राप्त करने के बारे में एक पूरा विवरण यहां पाया जा सकता है
https://golangbyexample.com/net-http-package-get-query-params-golang
नीचे शब्द आधिकारिक दस्तावेज से आए हैं।
फॉर्म में पार्स फॉर्म डेटा होता है, जिसमें URL फ़ील्ड के क्वेरी पैरामीटर और POST या PUT फॉर्म डेटा दोनों शामिल होते हैं । यह फ़ील्ड केवल ParseForm कहे जाने के बाद उपलब्ध है।
इसलिए, नीचे दिए गए नमूने कोड काम करेंगे।
func parseRequest(req *http.Request) error {
var err error
if err = req.ParseForm(); err != nil {
log.Error("Error parsing form: %s", err)
return err
}
_ = req.Form.Get("xxx")
return nil
}
r.FormValue("id")
एक क्वेरी परम प्राप्त करने के लिए उपयोग करते हैं, तो आप मुझे cURL में डेटा फॉर्म के माध्यम से नहीं भेज सकते हैं (अर्थात,curl 0.0.0.0:8888 -d id=foobar
काम नहीं करेगा)। आपको इसे क्वेरी परमेस (curl 0.0.0.0:8888?id=foobar
) के माध्यम से भेजना होगा ।