json bug или я что не так делаю

93 views
Skip to first unread message

Aln Kapa

unread,
Mar 3, 2016, 5:57:52 AM3/3/16
to Golang Russian
Добрый день.

Вот есть такой кусок кода:

....
type Device struct {
    Id int64
    Users map[string]int
}
....
device := new(Device)
device.Users = make(map[string]int
....
for {
    select {
    case egts := <-r.chd:
        buffer, err = r.d_controller.GetCacheById(egts.ID, dbname)
        // !!!!! device.Users = make(map[string]int) !!!!//
        err = json.Unmarshal(buffer, &device)
        ...
        }
}
...

в buffer приходят строки вида:
{"Id":"36","u":{"1":3,"5":0,"8":3,"9":3}}
{"Id":"6", "u":{"1":3,"5":0}}
.....

так вот, если расскомментарить строку // !!!!! все нормально работает, но если без нее то:
в момент получения строки {"Id":"6", "u":{"1":3,"5":0}} если до нее была строка  {"Id":"36","u":{"1":3,"5":0,"8":3,"9":3}} в device.Users я получаю  map[1:3 9:3 8:3 5:0] вместо map[1:3 5:0].

Вопрос это бага json или надо обязательно объявлять map до json.Unmarshal?

go version go1.5.1 linux/amd64

Спасибо.

Alexey “AlekSi” Palazhchenko

unread,
Mar 3, 2016, 6:01:22 AM3/3/16
to gola...@googlegroups.com
Привет,

https://golang.org/pkg/encoding/json/#Unmarshal

> Otherwise Unmarshal reuses the existing map, keeping existing entries.

–-–
Алексей «AlekSi» Палажченко

Aln Kapa

unread,
Mar 3, 2016, 6:10:17 AM3/3/16
to Golang Russian
Угу спасибо, я со slice перепутал.

А в курсе какой смысл было делать обработку по разному map и slice?

четверг, 3 марта 2016 г., 14:01:22 UTC+3 пользователь Alexey Palazhchenko написал:
Reply all
Reply to author
Forward
0 new messages