Go 获取输入

在 Go 中,我们使用 scan() 函数从用户那里获取输入。例如,

package main
import "fmt"

func main() {
  var name string

// takes input value for name fmt.Print("Enter your name: ") fmt.Scan(&name)
fmt.Printf("Name: %s", name) }

输出

Enter your name: Rosie
Name: Rosie

在上面的示例中,这一行

fmt.Scan(&name)

从用户那里获取输入值并将其分配给 name 变量。

Go 编程提供了 Scan() 方法的三个不同变体

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

注意:所有这些函数都定义在 fmt 包下。因此,在使用这些函数之前,我们必须导入 fmt 包。


Go fmt.Scan()

如前所述,Scan() 函数从用户那里获取输入。但是,它只能获取直到空格的输入值。

当它遇到空格时,空格前面的值将分配给指定的变量。例如,

package main
import "fmt"

func main() {
  var language string

// takes input value for name fmt.Print("Enter your favorite language: ") fmt.Scan(&language)
fmt.Printf("Favorite Language: %s", language) }

输出

Enter your favorite language: Go Programming
Favorite Language: Go

在上面的示例中,我们提供了输入值 Go Programming。但是,我们只得到 Go 作为输出。

这是因为 Scan() 函数仅获取空格之前的输入值。


使用 Scan() 获取多个输入

在 Go 中,我们可以使用 Scan() 函数从用户那里获取多个输入。例如,

package main
import "fmt"

func main() {
    
  // create variables
  var name string
  var age int
    
// take name and age input fmt.Println("Enter your name and age:") fmt.Scan(&name, &age)
// print input values fmt.Printf("Name: %s\nAge: %d", name, age) }

输出

Enter your name and age:
Maria
27
Name: Maria
Age: 27

在上面的示例中,我们创建了两个变量 nameage。请注意,我们使用了单个 Scan() 函数来获取两个变量的输入值。

fmt.Scan(&name, &age)

在这里,我们在两行中提供了两个输入值 Maria27(输入值用换行符分隔)。在这种情况下,第一行的值被分配给 name 变量,第二行的值被分配给 age

我们也可以通过用空格分隔来在同一行中提供两个值。

输出

Enter your name and age:
Maria 27
Name: Maria
Age: 27

在这种情况下,空格前面的值分配给第一个变量 name,空格后面的值分配给第二个变量 age


Go fmt.Scanln()

我们使用 Scanln() 函数获取直到换行的输入值。当它遇到换行符时,它会停止获取输入值。例如,

package main
import "fmt"

func main() {
  var name string
  var age int
    
// take name and age input fmt.Println("Enter your name and age:") fmt.Scanln(&name, &age)
fmt.Printf("Name: %s\nAge: %d", name, age) }

输出

Enter your name and age:
Maria
Name: Maria
Age: 0

在上面的示例中,我们使用了 Scanln() 函数来获取 nameage 的两个输入值。

fmt.Scanln(&name, &age)

但是,当我们输入第一个值 Maria 后按 Enter 键时,程序会退出。这是因为 Scanln() 只获取到换行符为止的输入值,所以当它遇到 Maria 后面的 Enter 键时,就会停止输入。

如果我们想获取 age 的输入值,我们必须提供用空格分隔的值。

输出

Enter your name and age:
Maria 27
Name: Maria
Age: 27

这里,我们用空格分隔了两个输入,所以 Scanln() 可以同时获取这两个输入值。


Go fmt.Scanf()

fmt.Scanf() 函数与 Scanln() 函数类似。唯一的区别是 Scanf() 使用格式说明符来获取输入。例如,

// Program to take input from user using Scanf()

package main
import "fmt"

func main() {
  var name string
  var age int

// take name and age input using format specifier fmt.Println("Enter your name and age:") fmt.Scanf("%s %d", &name, &age)
fmt.Printf("Name: %s\nAge: %d", name, age) }

输出

Enter your name and age:
Maria 27
Name: Maria
Age: 27

在上面的示例中,我们使用了 Scanln() 函数,通过各自的格式说明符获取 nameage 的两个输入值。

fmt.Scanf("%s %d", &name, &age) 

这里,

  • %s - 指定字符串输入,该输入被分配给 name 变量
  • %d - 指定整数输入,该输入被分配给 age 变量

Scanln() 一样,Scanf() 函数也通过空格分隔来获取值。当它遇到换行符时,Scanf() 会停止获取输入值。这就是为什么我们在同一行中输入值,并用空格分隔的原因。

在 Go 中,每种数据类型都有一个唯一的格式说明符,我们可以使用它们通过 Scanf() 来获取每种类型的值。

数据类型 格式说明符
整型 %d
浮点数 %g
string %s
bool %t

获取浮点型和布尔型输入

package main
import "fmt"

func main() {
  var temperature float32
  var sunny bool

  // take float input
  fmt.Println("Enter the current temperature:")
fmt.Scanf("%g", &temperature)
// take boolean input fmt.Println("Is the day sunny?")
fmt.Scanf("%t", &sunny)
fmt.Printf("Current temperature: %g\nIs the day Sunny? %t", temperature, sunny) }

输出

Enter the current temperature:
31.2
Is the day sunny?
true
Current temperature: 31.2
Is the day Sunny? true

在上面的示例中,我们使用了 %g 来获取 float32 类型的值,并使用 %t 来获取 bool 类型的值。

输入值 31.2 被分配给 temperature 变量,true 被分配给 sunny

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战