الوصول إلى معلمات HTTP POST في Go

واجهت مشكلة صغيرة أثناء محاولتي نشرها في Go backend باستخدامأكسيوسلكن لم أتمكن من الحصول على المعلمات التي كنت أرسلها.

كنت أفعل هذا:

func handleReq(w http.ResponseWriter, req *http.Request) {
	err := req.ParseForm()
	if err != nil {
		panic(err)
	}
	v := req.Form
	owner := req.Form.Get("owner")
	name := req.Form.Get("name")
    //...
}

لكن المعلمتين اللتين كنت أبحث عنهما لم تكن متوفرة. لماذا؟

تبين أنني كنت أفترض أن Axios أرسل المعلمات باستخدامContent-Type:application/x-www-form-urlencodedولكنه يستخدم بشكل افتراضيContent-Type:application/json.

ملاحظة: يمكنك تكوينه للاستخدامapplication/x-www-form-urlencoded، التحقق منhttps://github.com/axios/axios#using-applicationx-www-form-urlencoded-format

هذا يعني أنه للوصول إلى المعلمات أحتاج إلى فك تشفيرها باستخدامjson.Decoder.

إليك بعض نماذج التعليمات البرمجية التي تفي بالغرض:

type myData struct {
	Owner string
	Name  string
}

func handleAddNewRepo(w http.ResponseWriter, req *http.Request) { decoder := json.NewDecoder(req.Body)

<span style="color:#66d9ef">var</span> <span style="color:#a6e22e">data</span> <span style="color:#a6e22e">myData</span>
<span style="color:#a6e22e">err</span> <span style="color:#f92672">:=</span> <span style="color:#a6e22e">decoder</span>.<span style="color:#a6e22e">Decode</span>(<span style="color:#f92672">&amp;</span><span style="color:#a6e22e">data</span>)
<span style="color:#66d9ef">if</span> <span style="color:#a6e22e">err</span> <span style="color:#f92672">!=</span> <span style="color:#66d9ef">nil</span> {
	panic(<span style="color:#a6e22e">err</span>)
}

<span style="color:#a6e22e">owner</span> <span style="color:#f92672">:=</span> <span style="color:#a6e22e">data</span>.<span style="color:#a6e22e">Owner</span>
<span style="color:#a6e22e">name</span> <span style="color:#f92672">:=</span> <span style="color:#a6e22e">data</span>.<span style="color:#a6e22e">Name</span>
<span style="color:#75715e">//...

}


المزيد من دروس Go: