gopcp/example.v2

实测输出结果与《Go并发编程实战》给出的不一致

l328958741 opened this issue · 3 comments

操作系统: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!

请问为什么会出现不同的结果呢?

你这个输出很诡异,估计是你使用的终端的问题,建议你调试一下看看。

操作系统: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")

嗯,可以的。这里主要是为了简化起见,并没有做 Win 的适配,因为基本上没有人在 Win 上跑测试级和生产级的代码。你如果要做兼容,可以用ReadLine方法。