我正在 Go 中开发一个 TCP 聊天应用程序,其中服务器允许多个客户端连接和通信。我在某个特定功能上遇到了障碍,需要一些帮助。
需求:当用户正在输入消息或等待接收消息时,我需要在光标位置显示格式为[时间戳][用户名]的消息提示。
问题:尽管实现了下面的代码,但运行程序时时间戳和用户名没有出现在光标位置。
代码片段:
func (c *Client) sendMessages(wg *sync.WaitGroup) {
defer wg.Done()
for {
displayPromptWithTimestampAndUsername(c.name)
msg := utils.ReadInput("")
if strings.TrimSpace(msg) != "" {
utils.SendMessage(c.conn, msg)
}
}
}
func displayPromptWithTimestampAndUsername(username string) {
currentTime := time.Now().Format("2006-01-02 15:04:05")
fmt.Printf("\r[%s][%s]: ", currentTime, username)
}
任何人都可以提供关于如何确保时间戳和用户名在光标位置正确显示的见解或建议吗?
任何帮助将不胜感激。谢谢!
我已经验证了 displayPromptWithTimestampAndUsername 函数正在被调用,但输出没有按预期反映在光标位置
这取决于您的 utils.ReadInput 函数,因为它可能会更改您的标准输出输出。
以下示例代码对我有用,对于 utils.ReadInput 函数
func ReadInput(text string) string {
reader := bufio.NewReader(os.Stdin)
fmt.Print(text)
text, _ = reader.ReadString('\n')
return text
}