我準備在Go中編寫一個AJAX類型的應用程序,這是一個示例應用程序,以便熟悉它的工作方式。但事實並非如此。 InputRec(irec)字段在解碼後只有零。首先,源:Go的json解碼器不能處理最簡單的輸入。爲什麼?
package main
import (
"net/http"
"encoding/json"
"fmt"
// "io/ioutil"
)
type InputRec struct {
a, b float64
}
type RetRec struct {
sum float64
}
func addHandler(w http.ResponseWriter, r *http.Request) {
var outJson []byte
var irec InputRec
var orec RetRec
/* inJson, err := ioutil.ReadAll(r.Body)
num := len(inJson)
if err != nil {
panic("Error on reading body")
}
r.Body.Close()
err = json.Unmarshal(inJson, &irec)
fmt.Println("Input ", num, " bytes: ", string(inJson)) */
decoder := json.NewDecoder(r.Body)
err := decoder.Decode(&irec)
if err != nil {
panic("Error on JSON decode")
}
orec.sum = irec.a + irec.b
fmt.Println("a: ", irec.a, " b: ", irec.b, " Sum: ", orec.sum)
outJson, err = json.Marshal(orec)
if err != nil {
panic("Error on JSON encode")
}
w.Header().Set("Content-Type", "application/json")
_, err = w.Write(outJson)
if err != nil {
panic("Error writing response")
}
}
func main() {
http.HandleFunc("/", addHandler)
http.ListenAndServe(":1234", nil)
}
現在測試:
curl -X POST -i -d '{"a":5.4,"b":8.7}' http://localhost:1234/
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 2
Date: Sun, 23 Jun 2013 17:01:08 GMT
{}
注意,我知道身體能夠進入功能的要求,因爲我已經與註釋掉的代碼試了一下,而不是更短的JSON .Decoder行,並按預期打印請求主體。
使得當所述捲曲請求,這顯示爲從所述的println命令的輸出:
一個:0 B:0總:0
似乎很清楚的是,JSON字段排隊InputRec(只是a和b)所以這裏有什麼問題?
非常感謝!
與輸出相似。如果不是正確的答案,我會證明{sum:0}。爲什麼它是空白的? –