gpt4 book ai didi

go - 如何退出 reader.ReadString 等待用户输入?

转载 作者:数据小太阳 更新时间:2023-10-29 03:27:19 26 4
gpt4 key购买 nike

我这样做是为了在 CTRL-C 时不再要求输入。

我目前拥有的是一个单独的 go-routine,在收到 CTRL-C 后,会更改变量的值,因此它不会请求另一行。但是,我似乎找不到绕过当前行的方法。

即我仍然必须按一次 enter,才能退出当前的\n 阅读迭代。

有没有办法将“\n”插入标准输入以供 reader.ReadString 读取。或者完全停止执行的方法。

最佳答案

两种情况中的任何一种发生时,Go 为您提供的唯一合适的机制是 select,而 select 仅在 channel 读取时选择,因此您唯一的选择是更改信号处理程序 goroutine 以写入 channel ,并添加另一个处理 stdin 并将输入行传递到 channel 的 goroutine,然后在两个 channel 上进行选择。

但是,您的问题仍未得到解答:您的主程序可以停止等待 Ctrl-C 上的输入,但正在读取输入的 goroutine 仍将等待输入。在某些情况下,这可能没问题……如果您再也不需要 stdin,或者您将以完全相同的方式返回处理行。但是,如果您想从该阅读器执行 其他 操作,那么您就被卡住了……从字面上看。我看到的唯一解决方案是围绕 ReadReadByte 编写自己的状态机,它能够根据外部条件改变其行为,但这很容易变得可怕复杂。

基本上,这看起来像是 Go 与底层系统相比简化了一些事情(不暴露任何像 EINTR,不允许在文件句柄上选择),但最终为程序员提供了更少的权力。

关于go - 如何退出 reader.ReadString 等待用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36803268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com