0
A := 123
B := "xyz"
b := bytes.NewBufferString("a=" + A + "&b=" + B)
r.Body = ioutil.NopCloser(b)
是否有在POST
請求之前設置變量a
和b
一個更好的方式發送?設置POST請求的表單數據的變量
A := 123
B := "xyz"
b := bytes.NewBufferString("a=" + A + "&b=" + B)
r.Body = ioutil.NopCloser(b)
是否有在POST
請求之前設置變量a
和b
一個更好的方式發送?設置POST請求的表單數據的變量
形式鍵和值中的某些字符需要轉義,例如&
或=
。所以爲了避免這些錯誤,最好使用url.Values
類型。
它將string
鍵映射到string
值的列表。因此,如果您的值不是string
,則必須先將其轉換爲string
。最簡單的方法是使用fmt.Sprint()
或strconv.Itoa()
(更多選項請參閱Golang: format a string without printing?)。
vs := url.Values{}
vs.Set("a", fmt.Sprint(123))
vs.Set("b", "xyz")
vs.Set("tricky", "= & =")
b := bytes.NewBufferString(vs.Encode())
url.Values
知道如何正確地轉義鍵和值。上述vs.Encode()
例如輸出(嘗試在Go Playground):
a=123&b=xyz&tricky=%3D+%26+%3D
注:
由於url.Values
只是一個地圖(與map[string][]string
作爲其基本型),你也可以使用一個簡單的composite literal創建和填充它:
vs := url.Values{
"a": {strconv.Itoa(123)},
"b": {"xyz"},
"tricky": {"= & ="},
}
b := bytes.NewBufferString(vs.Encode())
嘗試在Go Playground這個變體。
你的意思是說更好? – noel
@shakabra避免字符串操作 – exebook
你不操縱字符串,你只需要一個字符串字面值。你的意思是不必指定編碼形式的值? – icza