1 go语言中的输入操作

在go语言中我们可以通过fmt包中的三种方法实现输入操作:

  • fmt.Scan()
  • fmt.Scanln()
  • fmt.Scanf()

2 fmt.Scan()

2.1 简单使用

Scan()可以输入一个值,也可以同时输入多个值,在2.2中会说明。

//声明一个要输入的变量
	var name string
	fmt.Print("请输入用户名:")
	//使用Scan来实现输入操作,记得括号中的变量名前面要加一个寻址符,相当于name的内存地址。Scan实现在它的内存空间中赋值,此时name的值就是我们输入的值。
	fmt.Scan(&name)
	fmt.Printf(name)

2.2 Scan()的返回值

Scan()使用时应注意以下几点:

  • 在使用Scan()时,用户输入完成后会返回两个值
  1. count:用户输入了几个值
  2. err:用户输入错误,提示错误信息
  • 当输入多个值的时候,要用空格分开输入
  • 若不想使用某一个返回值可以用_来接收,若两个返回值都不想要只是单纯的输入,那就直接写等号后面的即可。
  • 【注意】Scan()要求,若要输入两个值,那就必须输入两个,若要输入三个值,那就必须是三个。否则程序会一直等待,不会执行下面的程序。
fmt.Print("please enter the userName and age:")
    var userName string
    var age int
    count, _ := fmt.Scan(&userName, &age)
    fmt.Println("the userName is:", userName, "\nthe age is:", age)
    fmt.Println("user has entered", count, "values")

控制台输入liam 23后:

please enter the userName and age:liam 23
the userName is: liam 
the age is: 23
user has entered 2 values

3 fmt.Scanln()

Scan()Scanln()用法与功能效果完全一样,但只有一个不同点:

  • Scan()要求,若要输入两个值,那就必须输入两个,若要输入三个值,那就必须是三个。否则程序会一直等待,不会执行下面的程序;
  • Scanln()没有这个强制的要求,如果要求我们输入两个值,但只输入一个值,那么回车后程序依然会执行。

总结:Scan()必须等待所要求的值输入完成才能执行程序,但是Scanln()不管输入的数据是否完成,只要回车就直接执行。

4 fmt.Scanf()

特点:

  • 它也有两个返回值count和err;
  • 如果在Scanf()中写了两个输入值但是只输入一个,那样未输入的值就是该值类型的默认值;
  • 支持用户定制化输入。
fmt.Print("please enter the userName:")
    var userName string
    count, _ := fmt.Scanf("%s", &userName)
    fmt.Println("the userName is:", userName)
    fmt.Println("user has entered", count, "values")