4

全部。我正在用 Go 编写一个聊天客户端,作为我正在编写的库的概念验证。它需要接受用户输入并在同一个终端窗口中打印传入的消息。考虑以下。

user@debian ~ $ ./client
no session> 192.168.1.100
> Hello, there!
Hi!
> So, did you get that feature working yet?
Nope. I thought you were going to ask on StackOverflow.
>> Yeah, I'm aski

如果在我打字时有另一条消息到达,那么它应该产生以下内容。

user@debian ~ $ ./client
no session> 192.168.1.100
> Hello, there!
Hi!
> So, did you get that feature working yet?
Nope. I thought you were going to ask on StackOverflow.
Or did you want me to?
>> Yeah, I'm aski

有没有办法在 Go 中做到这一点?

谢谢 :)

4

2 回答 2

4

如果您曾经使用过类似行为的控制台应用程序,它可能使用像 ncurses 这样的库来执行此操作。你不想自己编程,因为它非常复杂。

对于 Go,我推荐termbox-go。它很容易上手并且有一个结构良好的api

于 2012-11-21T00:09:15.207 回答
0

这可能不是正确的方法(不是控制台开发人员),但不久前我在 Go 中做了一个终端动画,我在我的 Android 手机上运行。通过清屏、绘图、清屏等方式完成。

我不记得我用来清除屏幕的内容,但例如我刚刚尝试过,fmt.Print("\033[2J")它似乎有效。这里要注意。平台甚至终端仿真器对转义序列清除屏幕的支持可能会有所不同。

但是考虑到这一点,您可以维护客户端应该是什么样子的缓冲区,当收到消息时,清除屏幕,然后更改并重新打印缓冲区。

于 2012-11-20T23:51:09.823 回答