实测输出结果与《Go并发编程实战》给出的不一致
l328958741 opened this issue · 3 comments
l328958741 commented
操作系统:win10,64位
go版本:1.10.3 windows/amd64
代码:书中“1.5 问候程序”->"代码清单 1-2 hello.go"
我运行的代码如下:
package main
import(
"bufio"
"fmt"
"os"
)
func main() {
inputReader := bufio.NewReader(os.Stdin)
fmt.Println("Please input your name:")
input, err := inputReader.ReadString('\n')
if err != nil {
fmt.Printf("An error occurred: %s\n", err)
os.Exit(1)
}else {
input = input[:len(input)-1]
fmt.Println(input)
fmt.Printf("Hello, %s!", input)
}
}
运行结果:
Please input your name:
Robert
Robert
!ello, Robert
以上代码与书中基本一致,书中给出的运行结果为:
Please input your name:
Robert
Hello, Robert!
请问为什么会出现不同的结果呢?
hyper0x commented
你这个输出很诡异,估计是你使用的终端的问题,建议你调试一下看看。
gjk7788 commented
操作系统:win10,64位
go版本:1.10.3 windows/amd64
代码:书中“1.5 问候程序”->"代码清单 1-2 hello.go"
我运行的代码如下:package main import( "bufio" "fmt" "os" ) func main() { inputReader := bufio.NewReader(os.Stdin) fmt.Println("Please input your name:") input, err := inputReader.ReadString('\n') if err != nil { fmt.Printf("An error occurred: %s\n", err) os.Exit(1) }else { input = input[:len(input)-1] fmt.Println(input) fmt.Printf("Hello, %s!", input) } }运行结果:
Please input your name: Robert Robert !ello, Robert
以上代码与书中基本一致,书中给出的运行结果为:
Please input your name: Robert Hello, Robert!
请问为什么会出现不同的结果呢?
我也出现了这个问题,我想了一下是系统的原因,作者用的应该是linux或者mac OS写的代码,没有在windows平台下测试过,windows平台下的回车换行是\r\n。
改成这样
// input = input[:len(input)-1]
input = strings.TrimSuffix(input, "\r\n")
hyper0x commented
嗯,可以的。这里主要是为了简化起见,并没有做 Win 的适配,因为基本上没有人在 Win 上跑测试级和生产级的代码。你如果要做兼容,可以用ReadLine
方法。