go - 向 gorilla websocket 连接发送任意 JSON
问题描述
我有以下功能,我想将任意 JSON 数据发送到 websocket 连接。数据取决于发送到服务器的内容。如果不为我要发送的每件东西创建不同的结构,如何实现这一点?
我正在考虑这样的事情:
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": ...
。你错过了{}
.
推荐阅读
- reactjs - 为什么我的 React 应用程序可以在本地运行,但不能在 Azure 上运行?
- perl - 如何在 perl 中创建静态变量,以便我可以从另一个脚本访问
- r - 将“01APR2020”等字符转换为日期类 R
- firebase - 导航到特定屏幕后,使用 Firebase 注销不起作用
- angular - 身份验证通过后,角度重定向继续返回登录
- vue.js - 在创建 Firestore 文档之前进行 FirebaseUI 身份验证重定向
- c++ - Pawn 类在 On Begin Overlap 事件中命中自身 Unreal Engine C++
- java - 让 Chathead 气泡在 android 中永远运行
- regex - 改进正则表达式以重命名文件
- python - 安装numpy?