Go 的 json 解码器无法处理最简单的输入。为什么?

我准备用 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)对齐,那么这里有什么问题?


非常感谢!


至尊宝的传说
浏览 214回答 1
1回答

HUWWW

我知道了。我的结构的成员必须大写。:/
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go