Golang中类似d getch的功能是什么
Golang中类似d getch的功能是什么
func main() {
fmt.Println("hello world")
}
你好,我希望有一个命令能让用户在输入文本后,无需按下回车等其他按键,就能立即将其输入的字符保存到变量中。
1 回复
更多关于Golang中类似d getch的功能是什么的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,要实现类似C语言getch()的功能(无需回车即可读取单个字符),可以使用github.com/eiannone/keyboard包或golang.org/x/term包。以下是两种实现方式:
1. 使用keyboard包(推荐)
首先安装包:
go get github.com/eiannone/keyboard
示例代码:
package main
import (
"fmt"
"github.com/eiannone/keyboard"
"log"
)
func main() {
// 打开键盘监听
if err := keyboard.Open(); err != nil {
log.Fatal(err)
}
defer keyboard.Close()
fmt.Print("请输入一个字符(无需回车):")
// 读取单个字符
char, key, err := keyboard.GetKey()
if err != nil {
log.Fatal(err)
}
// 处理普通字符
if key == keyboard.KeyEsc || key == keyboard.KeyCtrlC {
fmt.Println("\n退出")
return
}
fmt.Printf("\n你输入的字符是: %c (ASCII: %d)\n", char, char)
}
2. 使用term包(标准库扩展)
package main
import (
"fmt"
"golang.org/x/term"
"os"
)
func main() {
fmt.Print("请输入一个字符(无需回车):")
// 将终端设置为原始模式
oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil {
panic(err)
}
defer term.Restore(int(os.Stdin.Fd()), oldState)
// 读取单个字节
var b [1]byte
_, err = os.Stdin.Read(b[:])
if err != nil {
panic(err)
}
fmt.Printf("\n你输入的字符是: %c (ASCII: %d)\n", b[0], b[0])
}
3. 简单封装函数
package main
import (
"fmt"
"github.com/eiannone/keyboard"
)
func getch() (rune, error) {
if err := keyboard.Open(); err != nil {
return 0, err
}
defer keyboard.Close()
char, _, err := keyboard.GetKey()
return char, err
}
func main() {
fmt.Print("请输入字符:")
char, err := getch()
if err != nil {
fmt.Println("错误:", err)
return
}
fmt.Printf("\n输入: %c\n", char)
}
关键点说明:
keyboard包提供了更完整的键盘事件处理,支持功能键检测term包是Go标准库的扩展,需要单独安装- 两种方式都会将终端设置为非缓冲模式,实现即时读取
- 记得在程序结束时恢复终端原始状态
运行效果:用户按下任意键后,程序会立即响应并显示该字符,无需等待回车键。

