Go strings.TrimSuffix的奇怪行为\n

Go strings.TrimSuffix的奇怪行为\n,go,newline,stdin,Go,Newline,Stdin,我试图从从键盘读取的文件名中删除\n,但生成的连接路径很奇怪 (windows上的Go 1.11) 输入ABC和换行符将产生以下输出,并删除1: 输入文件名: ABC 2ABC 这是怎么回事?我猜My\n实际上是一个2字符的CRLF,而TrimSuffix没有正确处理它。这就是问题所在吗?使用字符串。TrimSpace(字符串)字符串: fmt.Println("Enter file name:") reader := bufio.NewReader(os.Stdin) //read line

我试图从从键盘读取的文件名中删除\n,但生成的连接路径很奇怪

(windows上的Go 1.11)

输入ABC和换行符将产生以下输出,并删除1:

输入文件名:

ABC

2ABC


这是怎么回事?我猜My\n实际上是一个2字符的CRLF,而TrimSuffix没有正确处理它。这就是问题所在吗?

使用
字符串。TrimSpace(字符串)字符串

fmt.Println("Enter file name:")
reader := bufio.NewReader(os.Stdin)

//read line from console
filename, _ := reader.ReadString('\n')
filename = strings.TrimSpace(filename)
fmt.Println("1" + filename + "2")

“我猜我的\n实际上是一个2字符的CRLF,TrimSuffix没有正确处理它。这就是问题所在吗?”这似乎非常容易为您自己检查。是吗?您也正在使从
ReadString
返回的错误静音。它可能为零,但在测试之前无法确定。永远不要使错误静音。从ReadString文档:
ReadString读取,直到输入中第一次出现delim,返回包含数据的字符串,直到并包括分隔符。如果ReadString在查找分隔符之前遇到错误,它将返回在错误之前读取的数据以及错误本身(通常是io.EOF)。ReadString返回错误!=nil当且仅当返回的数据不以delim结尾时。对于简单的使用,扫描仪可能更方便。
->您可能会点击EOF而不是换行符。没有办法知道,因为你沉默了错误。是的,你忽略了一个可能的错误是正确的。但是我检查过了,没有返回任何错误。谢谢,这是有效的,而TrimSuffix没有。在一个不相关的问题上,我的问题真的是如此可怕以至于应该得-4分吗?我有时想知道这个网站。
fmt.Println("Enter file name:")
reader := bufio.NewReader(os.Stdin)

//read line from console
filename, _ := reader.ReadString('\n')
filename = strings.TrimSpace(filename)
fmt.Println("1" + filename + "2")