Yanıtlar:
Bir QueryString, tanımı gereği URL'nin içindedir. req.URL
( Doc ) kullanarak isteğin URL'sine erişebilirsiniz . URL nesnesinin bir Query()
yöntemi vardır ( docValues
, yalnızca map[string][]string
QueryString parametrelerinden biri olan bir türü döndüren ) vardır .
Aradığınız şey bir HTML formu tarafından gönderilen POST verileriyse , bu (genellikle) istek gövdesindeki bir anahtar / değer çiftidir. Cevabınızda haklısınız, arayabilir ParseForm()
ve ardından req.Form
anahtar / değer çiftlerinin haritasını almak için alanı kullanabilirsiniz , ancak FormValue(key)
belirli bir anahtarın değerini almak için de arayabilirsiniz . Bu, ParseForm()
gerekirse çağırır ve nasıl gönderildiklerine bakılmaksızın değerleri alır (yani sorgu dizesinde veya istek gövdesinde).
req.URL.RawQuery
Yardımcı olursa ?
, bir GET isteğinden sonraki her şeyi döndürür .
İşte GET parametrelerine nasıl erişileceğine dair daha somut bir örnek. Request
Nesne aradığınız için onları dışarı ayrıştırır bir yöntemi vardır Sorgu :
Http: // host: port / bir şey gibi bir istek URL'si varsayarsak ? 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
}
}
Ayrıca "Değerler eşlemesindeki [yani Query () dönüş değeri] anahtarların büyük / küçük harfe duyarlı olduğunu unutmayın."
r.URL.Query().Get("moviename")
bu ölümcül hatayı önlemek için kullanın ).
Get
Yöntemi kullanmak yalnızca birden fazla varsa ilkini döndürür, bu nedenle bu daha fazlasına bir örnektir. Faydalı bilgi, teşekkürler!
Values.Get()
döner ile nil
. golang.org/pkg/net/url/#Values
Aşağıda bir örnek verilmiştir:
value := r.FormValue("field")
daha fazla bilgi için. http paketi hakkında belgelerini buradan ziyaret edebilirsiniz . FormValue
temel olarak POST veya PUT değerlerini veya GET değerlerini, bulduğu ilk sırayla döndürür.
İşte basit, çalışan bir örnek:
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)
}
Sorgu parametrelerini almanın iki yolu vardır:
İkinci durumda, vücut parametreleri sorgu parametrelerine göre öncelikli olacağından dikkatli olunmalıdır. Sorgu parametrelerini almayla ilgili tam bir açıklama burada bulunabilir
https://golangbyexample.com/net-http-package-get-query-params-golang
Aşağıdaki kelimeler resmi belgeden alınmıştır.
Form, hem URL alanının sorgu parametreleri hem de POST veya PUT form verileri dahil olmak üzere ayrıştırılmış form verilerini içerir . Bu alan yalnızca ParseForm çağrıldıktan sonra kullanılabilir.
Bu nedenle, aşağıdaki gibi örnek kodlar işe yarar.
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")
bir sorgu parametresi almak için kullanıyorsanız , i'yi cURL'deki form verileri aracılığıyla gönderemezsiniz (yanicurl 0.0.0.0:8888 -d id=foobar
çalışmayacaktır). Sorgu parametreleri (curl 0.0.0.0:8888?id=foobar
) aracılığıyla göndermelisiniz .