Jawaban:
QueryString, menurut definisi , ada di URL. Anda dapat mengakses URL permintaan menggunakan req.URL
( doc ). Objek URL memiliki Query()
metode ( doc ) yang mengembalikan Values
tipe, yang merupakan map[string][]string
parameter QueryString.
Jika yang Anda cari adalah data POST yang dikirimkan oleh formulir HTML , maka ini (biasanya) adalah pasangan nilai kunci di badan permintaan. Anda benar dalam jawaban yang bisa Anda panggil ParseForm()
dan kemudian gunakan req.Form
bidang untuk mendapatkan peta pasangan nilai kunci, tetapi Anda juga bisa menelepon FormValue(key)
untuk mendapatkan nilai kunci tertentu. Panggilan ini ParseForm()
jika diperlukan, dan mendapatkan nilai terlepas dari bagaimana mereka dikirim (yaitu dalam string kueri atau dalam isi permintaan).
req.URL.RawQuery
mengembalikan semuanya setelah ?
permintaan GET, jika itu membantu.
Berikut adalah contoh yang lebih konkret tentang cara mengakses parameter GET. The Request
objek memiliki metode yang mem-parsing mereka keluar untuk Anda disebut Query :
Dengan asumsi URL permintaan seperti http: // host: port / sesuatu? 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
}
}
Perhatikan juga "kunci dalam peta Nilai [yaitu, Query () nilai kembalian] peka huruf besar / kecil."
r.URL.Query().Get("moviename")
untuk menghindari kesalahan fatal ini).
Get
metode ini hanya mengembalikan yang pertama jika ada beberapa, jadi ini adalah contoh lainnya. Info berguna, terima kasih!
Values.Get()
kembali dengan nil
. golang.org/pkg/net/url/#Values
Berikut ini contohnya:
value := r.FormValue("field")
untuk info lebih lanjut. tentang paket http, Anda dapat mengunjungi dokumentasinya di sini . FormValue
pada dasarnya mengembalikan nilai POST atau PUT, atau nilai GET, dalam urutan itu, yang pertama ditemukannya.
Berikut adalah contoh kerja sederhana:
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)
}
Ada dua cara untuk mendapatkan parameter kueri:
Dalam kasus kedua, seseorang harus berhati-hati karena parameter tubuh akan didahulukan daripada parameter kueri. Penjelasan lengkap tentang mendapatkan parameter kueri dapat ditemukan di sini
https://golangbyexample.com/net-http-package-get-query-params-golang
Kata-kata di bawah ini berasal dari dokumen resmi.
Formulir berisi data formulir yang diurai, termasuk parameter kueri bidang URL dan data formulir POST atau PUT . Bidang ini hanya tersedia setelah ParseForm dipanggil.
Jadi, contoh kode seperti di bawah ini akan berfungsi.
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")
untuk mengambil parameter kueri, Anda tidak dapat mengirim i melalui data formulir dalam cURL (yaitu,curl 0.0.0.0:8888 -d id=foobar
tidak akan berfungsi). Anda harus mengirimkannya melalui query params (curl 0.0.0.0:8888?id=foobar
).