#go
#Вперед
Вопрос:
После отладки приведенного ниже кода на стороне сервера:
type myStruct struct {
key string
value string
}
key, value := gen()
data := myStruct{key, value}
myJSON, err := json.Marshal(data)
err = conn.WriteMessage(websocket.TextMessage, myJSON)
gen()
заполняет key
и value
строками
myJSON
Шоу:
После записи myJSON
в веб-сокет на стороне клиента принимается пустой json:
ws.onmessage = function (evt)
{
console.log(evt.data)
};
Почему conn.WriteMessage()
не передаются данные ( myJSON
) на сторону клиента?
Комментарии:
1. Ваши поля не экспортированы. Экспортированные поля имеют первую букву с заглавной буквы
2. @zerkms Нужно ли мне экспортировать (
data.key
amp;data.value
) по той причине, что данные находятся в проводном режиме?3. Упорядочиваются только экспортированные поля, независимо от того, как вы используете эти данные. Ваш
myJSON
— пустой объект JSON.4. «Значения структуры кодируются как объекты JSON. Каждое экспортированное поле структуры становится членом объекта, используя имя поля в качестве ключа объекта, если только поле не опущено по одной из причин, приведенных ниже.» golang.org/pkg/encoding/json/#Marshal
5. «myJSON показывает … len=2» — это ваш пустой объект. Именно то, что получено на другом конце.
Ответ №1:
@zerkms прав, у вас должно быть что-то вроде этого:
type myStruct struct {
Key string `json:"key"`
Value string `json:"value"`
}
key, value := gen()
data := myStruct{Key: key, Value: value}
myJSON, err := json.Marshal(data)
if err != nil {
// error handling
}
err = conn.WriteMessage(websocket.TextMessage, myJSON)
if err != nil {
// error handling
}
Вы можете найти простой пример здесь.