我是新手。
我在下面编写了程序,以允许用户输入名称。
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") }
我运行了程序并输入了 尼克松的* 名字 *
为什么fmt.Println(name == "nixon")总是输出false?
fmt.Println(name == "nixon")
false
func(* Reader)ReadString func (b *Reader) ReadString(delim byte) (string, error) ReadString读取直到输入中第一次出现delim为止,并返回一个字符串,其中包含直到定界符(包括定界符)的数据。
func(* Reader)ReadString
func (b *Reader) ReadString(delim byte) (string, error)
ReadString读取直到输入中第一次出现delim为止,并返回一个字符串,其中包含直到定界符(包括定界符)的数据。
name终端输入包括尾随换行符。例如,
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")
}
Enter name:nixon "nixon\n" "nixon" true
Enter name:nixon "nixon\r\n" "nixon" true