go搭建chatroom
大概记录一下计网大作业的一些事
刚好想学一门新的语言然后就选择了用go搭建一个在线聊天室
可能还没有对go了解比较深,所以对go的感觉只有一个(erro处理太麻烦:sob:)
项目地址丢在了:https://github.com/cyny666/chatroom
主要是通过websocket协议然后实现聊天室的一个用户端和服务器端,用户端是用js实现的,服务器端是用go实现的,这里吐槽一下两种语言的调试是真的麻烦
记录一个解决了几个小时出现的bug(也是找了好久)
服务器端的代码部分如下
1 | private_message := Message{ |
这里主要是加了一个私聊的功能,但是在客户方面返回的结果如下
就很奇怪预期的data应该是一个json结构的式子,后面把u.Conn.WriteJSON(json_private)改为WriteMessage即可解决问题了
然后开始去找问题的出现,发现google搜索无果于是去找源码了,经过大佬点拨发现这个
JSON的加密时Marshal
指的是[]byte会被base64编码
把data base64解码后得到
妈的想了半天终于懂了
我是先用json编码 json_private, err := json.Marshal(private_message)
这里的json_private为二进制数据,然后这里的string(json_private)也是正确的
然后直接用WriteJSON会有问题,然后用WriteMessage应该是会自动进行string转化的
WriteJSON writes the JSON encoding of v as a message.
WriteJSON调用了一次Marshal所以会把byte[]给搞成base64加密