在Go中构建一个简单的基于TCP的聊天应用程序时遇到了一些困难。我的问题是,在更改变量名称后,格式化似乎变得混乱,并且消息文本会覆盖发件人和其他字符的名称。
以下所有代码段均来自服务器。
type Message struct {
sender *User
message string
}
type User struct {
connection net.Conn
queue chan string//Simply a queue of messages that will be sent to the client, out of the scope of this question
name string
}
设置名称的代码:(假设命令的格式为“/ nick NAME”)
command := message.message[1:]
if(strings.HasPrefix(command, "nick")) {
message.sender.name = command[5:]
fmt.Println("Set name to: " + message.sender.name)
}
打印值的代码(请注意,如果我使用传统的s1 + s2
连接字符串时错误仍然存在):
var buffer bytes.Buffer
buffer.WriteString("<")
buffer.WriteString(message.sender.name)
buffer.WriteString("> ")
buffer.WriteString(message.message)
fmt.Println(buffer.String())
sendMessage(buffer.String())
输出(左侧服务器,右侧客户端。不是我两次都发送消息'测试'):
如上所示,消息的格式应该是<NewName123> Test
,但是大于符号的位置是错误的,可以看到消息测试覆盖用户的名称。我很难过导致这个问题的原因。
应用程序的工作方式如下:客户端连接。客户端发送消息,服务器读取消息并应用格式(IE添加用户名)。服务器将邮件重新分发给所有用户(包括发件人)。客户端显示消息。
任何帮助都会很棒。
答案 0 :(得分:4)
这看起来像名称包含一个回车符(# html template
<input name="query" class="form-control mr-sm-2" type="text" placeholder="Search">
# view
query = request.GET.get('query')
),它指示终端写\r
,然后将回车(也就是。游标)返回到行的开头,然后(结束)写<NewName123>
。
在某个地方进行> Test
调用应解决此问题。