回答:
QueryStringは、定義上、URL内にあります。req.URL
(doc)を使用してリクエストのURLにアクセスできます。URLオブジェクトには、タイプを返すQuery()
メソッド(doc)がありValues
、これは単にmap[string][]string
QueryStringパラメータの1つです。
探しているものがHTMLフォームによって送信された POSTデータである場合、これは(通常)リクエスト本文のキーと値のペアです。答えは正しいので、呼び出してParseForm()
からreq.Form
フィールドを使用してキーと値のペアのマップを取得できますが、呼び出しFormValue(key)
て特定のキーの値を取得することもできます。これはParseForm()
必要に応じて呼び出され、送信方法(クエリ文字列またはリクエスト本文)に関係なく値を取得します。
req.URL.RawQuery
?
GETリクエストの後で、それが役立つ場合はすべてを返します。
GETパラメータにアクセスする方法のより具体的な例を次に示します。Request
オブジェクトは、あなたが呼ばれるためにそれらを解析している方法でクエリを:
http:// host:port / something?param1 = bのようなリクエストURLを想定
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
}
}
また、「値マップのキー[Query()戻り値]は大文字と小文字が区別されます。」
Get
メソッドを使用すると、複数ある場合に最初のものが返されるだけなので、これはさらに多くの例です。役立つ情報、ありがとうございます!
Values.Get()
リターンとをnil
。 golang.org/pkg/net/url/#Values
簡単で実用的な例を次に示します。
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)
}
クエリパラメータを取得するには2つの方法があります。
2番目のケースでは、ボディパラメータがクエリパラメータよりも優先されるため、注意が必要です。クエリパラメータの取得についての詳細は、こちらをご覧ください。
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のフォームデータを介してiを送信することはできません(つまり、機能しcurl 0.0.0.0:8888 -d id=foobar
ません)。クエリパラメータ(curl 0.0.0.0:8888?id=foobar
)を介して送信する必要があります。