我准备用 Go 编写一个 AJAX 类型的应用程序,这是一个示例应用程序,用于熟悉它的工作原理。但事实并非如此。InputRec (irec) 字段在解码后只有零。先说源码:package mainimport ( "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 OKContent-Type: application/jsonContent-Length: 2Date: Sun, 23 Jun 2013 17:01:08 GMT{}请注意,我知道请求正文正在执行该函数,因为我已经尝试使用注释掉的代码而不是较短的 json.Decoder 行,并且它按预期打印了请求正文。发出上述 curl 请求时,这显示为 Println 命令的输出:a:0 b:0 总和:0似乎很清楚 json 字段与 InputRec (只是 a 和 b)对齐,那么这里有什么问题?非常感谢!
- 1 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消