为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 不处理 2 个操作

Golang 不处理 2 个操作

Go
小怪兽爱吃肉 2021-12-27 15:45:02
我是 golang 的新手,我不明白为什么我不能让下一个代码工作:func ListApps(){    fmt.Printf("\nPress Q to go back..\n")    reader := bufio.NewReader(os.Stdin)    input, _ := reader.ReadString('\n')    if string(input) == "q" {        fmt.Printf("OK")     } }我想打印一条消息,然后在控制台中扫描用户的输入,如果输入等于字符串“q”,则比较输入并打印 messafe。由于某些原因,上次检查不起作用。
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

来自 TFM:


ReadString 读取直到输入中第一次出现 delim,返回一个包含数据的字符串,直到并包括分隔符


您正在比较没有分隔符的字符串。


所以只是这样做:


if input == "q\n" {...}

会工作(顺便说一句,不需要调用,string(input)因为输入已经是一个字符串)。


或者,您也可以在检查之前使用strings.TrimRight. 这将使代码更具可移植性,因为它可以在\r\n用于分隔行的Windows 上工作。所以这样做:


input = strings.TrimRight(input, "\r\n")

if input == "q" {

    fmt.Println("OK")

}

我已经测试过这个可以自己工作。


查看完整回答
反对 回复 2021-12-27
?
撒科打诨

TA贡献1934条经验 获得超2个赞

Not_a_Golfer 是正确的为什么它不工作。但是,对于从 STDIN 读取之类的简单事情,您最好使用 Scanner:


func ListApps(){

    fmt.Printf("\nPress Q to go back..\n")

    reader := bufio.NewScanner(os.Stdin)

    reader.Scan()  // this line scans the STDIN for input


    // error checking...

    if err := scanner.Err(); err != nil {

        panic(err)

    }


    // To access what the scanner got, you use scanner.Text() (reader.Text() in this case)

    if reader.Text() == "q" {

        fmt.Printf("OK")

     }

 }

无论输入来自何处(Windows 命令提示符、linux/OSX 上的终端等),这都将起作用


查看完整回答
反对 回复 2021-12-27
  • 2 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信