2014-10-19 2 views
0

Я недоумеваю. Когда я POST с помощью следующего телаGo - чувствительный к регистру?

{"lng":1.23, "lat":4.56,"utc":789} 

она возвращает {0,0,0} (неверно)

func test(rw http.ResponseWriter, req *http.Request) { 
    type data struct { 
    lng float64 
    lat float64 
    utc int 
    } 
    decoder := json.NewDecoder(req.Body) 
    var t data 
    err := decoder.Decode(&t) 
    if err != nil { 
     panic("PANIC") 
    } 
    log.Println(t) 
} 

Это один возвращает {1,23, 4,56, 789} (правильный)

func test(rw http.ResponseWriter, req *http.Request) { 
    type data struct { 
    Lng float64 
    Lat float64 
    Utc int 
    } 
    decoder := json.NewDecoder(req.Body) 
    var t data 
    err := decoder.Decode(&t) 
    if err != nil { 
     panic("PANIC") 
    } 
    log.Println(t) 
} 

Единственное различие заключается в том, что я использую буквы верхнего регистра в определении моей структуры. Я что-то упустил? Это ошибка?

+0

См. Связанные вопросы: [1] (http://stackoverflow.com/questions/26327391/golang-json-marshalstruct-returns/26327436), [2] (http://stackoverflow.com/questions/26050469/ json-unmarshall-not-working-proper/26050501), [3] (http://stackoverflow.com/questions/25595096/unmarshalling-json-golang-not-working/25595269). –

ответ

11

JSON encoding package работает только с exported fields. В противном случае декодер нечувствителен к регистру.

Вы можете управлять случаем при кодировании с использованием тегов полей, как описано в package documentation.

The Go Language чувствителен к регистру.