У меня есть следующая функция, в которой я хочу отправить произвольные данные JSON в соединение через веб-сокет. Данные зависят от того, что было отправлено на сервер. Как этого добиться, не создавая разные структуры для каждой вещи, которую я хочу отправить?
Я думаю примерно так:
func Register(c *websocket.Conn, m WebsocketGeneralClientMessage) {
var d RegisterData
json.Unmarshal(m.Data, &d)
if len(d.Email) < 6 || len(d.Email) > 64 {
c.WriteJSON(WebsocketGeneralServerMessage{
Type: "error", Data: map[string]interface{"text": "This is an error"}})
return
}
if len(d.Password) < 6 || len(d.Password) > 32 {
c.WriteJSON(WebsocketGeneralServerMessage{
Type: "error", Data: map[string]interface{"text": "This is another error"}})
return
}
err := checkmail.ValidateFormat(d.Email)
if err != nil {
c.WriteJSON(WebsocketGeneralServerMessage{
Type: "error", Data: map[string]interface{"text": "This is different than all the previous errors"}})
return
}
uuid, email, password, err := DB.RegisterAccount(requestEmail, requestPassword)
if err != nil {
c.WriteJSON(WebsocketGeneralServerMessage{
Type: "error", Data: map[string]interface{"text": "An error occured while saving the account to the database"}})
return
}
c.WriteJSON(WebsocketGeneralServerMessage{
Type: "success", Data: map[string]interface{"uuid": uuid}})
return
}
type WebsocketGeneralServerMessage struct {
Type string
Data map[string]interface{}
}
Однако компилятор говорит:
syntax error: unexpected literal "text", expecting method or interface name
поэтому кажется, что этот синтаксис недействителен. Что тут можно сделать?
Это map[string]interface{}{"text": ...
. Вы пропустили {}
. — person virtumonde schedule 20.09.2020
Ух ты! Пожалуйста, добавьте это в качестве ответа. Большое спасибо за Ваш ответ! Это было впечатляюще быстро. — person virtumonde schedule 20.09.2020
Это
map[string]interface{}{"text": ...
. Вы пропустили{}
.Имея дело с таким json, я почти всегда добавляю
type M map[string]interface{}
. Это позволяет делать данные сM{"key":123,"submap":M{"abc":"def"}}
, что значительно упрощает чтение источника. — person virtumonde; 21.09.2020