Go 为什么切片ReadString()操作的结果会导致奇怪的输出?

Go 为什么切片ReadString()操作的结果会导致奇怪的输出?,go,concatenation,Go,Concatenation,运行代码: package main import ( "bufio" "fmt" "os" ) func main() { reader := bufio.NewReader(os.Stdin) fmt.Printf("Input: ") input, _ := reader.ReadString('\n') fmt.Println("thing\n"[:5] + "\"") fmt.Println(input[:len(

运行代码:

package main

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

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

    fmt.Printf("Input: ")
    input, _ := reader.ReadString('\n')

    fmt.Println("thing\n"[:5] + "\"")
    fmt.Println(input[:len(input)-1] + "\"")

    return
}

为什么第二个连接行为异常?假设ReadString()操作返回一个末尾有换行符的字符串,它应该会产生相同的结果。请解释一下这里发生了什么。

那是因为你大概在windows上

您从键盘进行的实际输入不是
thing\n
,而是
thing\r\n

因此,当您执行
fmt.Println(输入[:len(输入)-1]+“\”)
时,它只截断最新的
\n
并保留
\r


因此,终端打印
东西
,然后到达
\r
,将回车返回字符串开头,然后打印双引号。但是回车现在位于第一个位置,它实际上覆盖了行的第一个字符,留给您的是
“hing

您在windows上吗?不可复制linux@zerkms我在窗户上。你的回答解决了我的问题。
Input: thing
thing"
"hing