Отправить произвольный JSON в соединение с gorilla websocket

У меня есть следующая функция, в которой я хочу отправить произвольные данные 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

См. также:  Клиентская библиотека Cloud Datastore и SDK для App Engine в App Engine Go Standard
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. virtumonde

    Это map[string]interface{}{"text": .... Вы пропустили {}.

    Имея дело с таким json, я почти всегда добавляю type M map[string]interface{}. Это позволяет делать данные с M{"key":123,"submap":M{"abc":"def"}}, что значительно упрощает чтение источника. person virtumonde; 21.09.2020

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: