Golang 程序在 Windows 10 中给出错误结果

首先,我是Go编程的新手。我有一个简单的 Golang 程序,它在 Linux 环境中给出了正确的输出,但在我的 Windows 10 PC 中却没有。


代码如下:


package main


import (

    "bufio"

    "fmt"

    "os"

    "strconv"

    "strings"

)


func main() {

    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter text: ")

    text, _ := reader.ReadString('\n')

    tarr := strings.Split(strings.Trim(text, "\n"), " ")


    for i := 0; i < len(tarr); i++ {

        num, _ := strconv.ParseInt(tarr[i], 10, 32)

        fmt.Println(num)

    }


    fmt.Println(tarr)

    reader.ReadString('\n')

}

如果我从终端输入 1 2 3 作为输入,我将在 Windows 10 中得到以下输出(go 版本 go1.12.5 windows/amd64):


1

2

0

]1 2 3

我在 Linux Elementary OS 中得到以下输出(go 版本 go1.12.5 linux/amd64)


1

2

3

[1 2 3]

谁能解释为什么会发生这种情况?


跃然一笑
浏览 135回答 1
1回答

ibeautiful

UNIX(和 Linux)的行结尾是\n.Windows 的行结尾是\r\n.&nbsp;这意味着您在 Linux 上读到的行是 ,1 2 3\n而在 Windows 上读到的行是1 2 3\r\n。如果您现在删除\n(即strings.Trim(text, "\n")) 并按空格分割1,在 Linux 上您会得到 , ,但在 Windows 上您会2得到,&nbsp;,&nbsp;。3123\rParseInt返回并可能返回一个错误 - 您明确忽略该错误3\r。这就是为什么在 Windows 上会得到,和0的输出。此外,Windows 上的数组将打印为.&nbsp;由于将输出光标设置为当前行的开头并且不会移动到下一行(这就是要做的事情),因此这会有效地用Final覆盖 initial&nbsp;,从而产生 的可见输出。120[1 2 3\r]\r\n[]] 1 2 3
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go