go - 终端输入与预期结果不符

标签 go gofmt

我是 Go 新手。

我编写了下面的程序以允许用户输入名称。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }

    fmt.Println(name == "nixon")
}

我运行程序并输入我的名字 nixon

为什么 fmt.Println(name == "nixon") 的输出总是 false

最佳答案

func (*Reader) ReadString

func (b *Reader) ReadString(delim byte) (string, error)

ReadString reads until the first occurrence of delim in the input, returning a string containing the data up to and including the delimiter.


name 终端输入包括尾随换行符。例如,

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }
    fmt.Printf("%q\n", name)

    fmt.Println(name == "nixon")
}

输出(Linux):

Enter name:nixon
"nixon\n"
false

输出(Windows):

Enter name:nixon
"nixon\r\n"
false

修剪尾随换行符。例如,

package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }
    fmt.Printf("%q\n", name)
    name = strings.TrimRight(name, "\r\n")
    fmt.Printf("%q\n", name)

    fmt.Println(name == "nixon")

输出(Linux):

Enter name:nixon
"nixon\n"
"nixon"
true

输出(Windows):

Enter name:nixon
"nixon\r\n"
"nixon"
true

关于go - 终端输入与预期结果不符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805055/

相关文章:

arrays - 如何使用嵌套数组解码 JSON 响应数组

go - fmt.Printf ("%f\n",x) 将 Float64 舍入为 Float32,但 fmt.Println(x) 不会

go - 有没有办法在不完全禁用 gofmt 的情况下防止 gofmt 将代码函数转换为多行?

go - 如何打印反斜杠?

go - 我如何向 channel 发送者发出信号以退出 golang?

string - 在 Go 中执行 http 请求时字符串出现乱码

templates - Golang 分页

go - 你能调用 gofmt 来格式化你从编写它的 Go 代码内部编写的文件吗?

go - 在没有插件的情况下在 vim 上运行 gofm

go - 如何取消引用动态多级指针?