英文:
golang reading text input over more than one line and stop ctrl+s
问题
如何在golang中读取多行控制台输入?
reader := bufio.NewReader(os.Stdin)
fmt.Println("Enter Text:")
text, _ := reader.ReadString('\n')
我应该如何更改ReadString(???)
以便在用户按下<kbd>ctrl</kbd>+<kbd>s</kbd>时停止读取?换行符(\n
)必须保留为输入的一部分。
是否有一些库/框架可以实现这个功能?
感谢您的帮助。
祝好。
英文:
How can I read more than one line in golang, console input.
reader := bufio.NewReader(os.Stdin)
fmt.Println("Enter Text:")
text, _ := reader.ReadString('\n')
How I must change ReadString(???) to stop reading if the user hit: <kbd>ctrl</kbd>+<kbd>s</kbd>
The New Line (\n
) must remain a constituent of the input.
Is there some library/framework for that?
Thanks for every help.
Cheers
答案1
得分: 3
以下是对Linux的答案(也适用于其他*nix平台):
Ctrl+S
是一个控制字符DC3
,它表示“XOFF,停止发送”。如果按下Ctrl+S
,终端会冻结。
Ctrl+Q
是一个控制字符DC1
,它表示“XON,继续发送”,在按下Ctrl+S
后需要按下Ctrl+Q
来解冻。
要使用Ctrl+S
,首先使用stty -ixon
禁用XON/XOFF
(可能在启动脚本中)。
在禁用XON/XOFF
之后,以下是示例代码(DC3
在ASCII表中的十六进制为13/十进制为19):
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Println("输入文本:")
text, _ := reader.ReadString('\x13')
fmt.Println(text)
}
希望对你有帮助!
英文:
Here is an answer for Linux (and could work for other *nix platforms)
Ctrl+S
is a control character DC3
, it means "XOFF, stop sending". If you press Ctrl+S
the terminal would freeze.
Ctrl+Q
is a control character DC1
, it mean "XON, continue sending", it is necessary after Ctrl+S
to unfreeze.
To use the Ctrl+S
, first disable XON/XOFF
with stty -ixon
(maybe in in startup script)
After disabling XON/XOFF
, the sample code is following (DC3
is HEX:13/DEC:19 in ASCII table);
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Println("Enter Text:")
text, _ := reader.ReadString('\x13')
fmt.Println(text)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论