我正准备在Go中编写一个AJAX类型的应用程序,这是一个示例应用程序,可以熟悉它的工作方式。但事实并非如此。 InputRec(irec)字段在解码后只有零。首先来源:
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行尝试了它,并且它按预期打印了请求体。
当发出所述curl请求时,它显示为Println命令的输出:
a:0 b:0总和:0
很明显json字段排列到InputRec(只是a和b)所以这里有什么问题?
非常感谢!
答案 0 :(得分:2)
我明白了。我结构的成员必须资本化。 :/