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标准库的扩展,需要单独安装
  • 两种方式都会将终端设置为非缓冲模式,实现即时读取
  • 记得在程序结束时恢复终端原始状态

运行效果:用户按下任意键后,程序会立即响应并显示该字符,无需等待回车键。

回到顶部