2013-06-23 59 views
1

我準備在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)所以這裏有什麼問題?

非常感謝!

+0

與輸出相似。如果不是正確的答案,我會證明{sum:0}。爲什麼它是空白的? –

回答

2

我明白了。我的結構成員必須大寫。 :/

+0

是的,但不會感覺不好,這是一個非常普遍的錯誤。 –

+0

他們必須成爲會員,因爲他們需要公開 –

相關問題