Go语言实现控制台输入的方式

使用bufio和os包实现:类似Java控制台输入
bufio建立缓冲区,os.Stdin确定输入位置
func getInput() string {
	//使用os.Stdin开启输入流
	//函数原型 func NewReader(rd io.Reader) *Reader
	//NewReader创建一个具有默认大小缓冲、从r读取的*Reader 结构见官方文档
	in := bufio.NewReader(os.Stdin)
	//in.ReadLine函数具有三个返回值 []byte bool error
	//分别为读取到的信息 是否数据太长导致缓冲区溢出 是否读取失败
	str, _, err := in.ReadLine()
	if err != nil {
		return err.Error()
	}
	return string(str)
}

Reader支持的函数有:详见官方文档
Go语言实现控制台输入的方式_第1张图片
同样使用os.Stdin

func getInputByScanner() string {
	var str string
	//使用os.Stdin开启输入流
	in := bufio.NewScanner(os.Stdin)
	if in.Scan() {
		str = in.Text()
	} else {
		str = "Find input error"
	}
	return str
}

Scanner读取的两个主要函数:
func (s *Scanner) Bytes() []byte
func (s *Scanner) Text() string

使用fmt包实现:类似C控制台输入
func getInputByFmt() string {
	//定义变量
	var str string
	//Scanf函数读取输入到变量中 两个返回值
	//分别为读取到的长度 失败信息
	length, err := fmt.Scanf("%s", &str)//注意使用%s读取输入字符串只能读取到空白符之前
	if err != nil {
		return err.Error()
	}
	fmt.Println("Read length is ", length)
	return str
}

--------------------------------------
测试程序:

func main() {
	fmt.Print("Get input by Reader:")
	str1 := getInput()
	fmt.Println(str1)

	fmt.Print("Get input by Scanner:")
	str2 := getInputByScanner()
	fmt.Println(str2)

	fmt.Print("Get input by fmt:")
	str3 := getInputByFmt()
	fmt.Println(str3)
}

运行结果:
Go语言实现控制台输入的方式_第2张图片

Go小白,欢迎补充指正

你可能感兴趣的:(Go语言学习)