控制台输入方法
Go 语言提供了多种处理控制台输入的方法,每种方法都有其特点和适用场景。
1. fmt.Scan 系列
fmt.Scan
系列函数是最简单的输入方法,适合简单的输入场景。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| package main
import "fmt"
func main() {
var name string
var age int
// 读取字符串
fmt.Print("请输入姓名: ")
fmt.Scan(&name)
// 读取整数
fmt.Print("请输入年龄: ")
fmt.Scan(&age)
fmt.Printf("姓名: %s, 年龄: %d\n", name, age)
}
|
2. bufio.Scanner
bufio.Scanner
提供了更灵活的输入处理方式,适合处理多行输入。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// 读取一行
fmt.Print("请输入姓名: ")
scanner.Scan()
name := scanner.Text()
// 读取整数
fmt.Print("请输入年龄: ")
scanner.Scan()
age, _ := strconv.Atoi(scanner.Text())
fmt.Printf("姓名: %s, 年龄: %d\n", name, age)
}
|
3. bufio.Reader
bufio.Reader
提供了底层的输入控制,适合需要精确控制输入的场景。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// 读取一行(包含换行符)
fmt.Print("请输入姓名: ")
name, _ := reader.ReadString('\n')
name = strings.TrimSpace(name)
// 读取单个字符
fmt.Print("请输入性别 (M/F): ")
gender, _ := reader.ReadByte()
fmt.Printf("姓名: %s, 性别: %c\n", name, gender)
}
|
4. io.ReadAll
io.ReadAll
用于一次性读取所有输入,适合处理完整的输入流。
1
2
3
4
5
6
7
8
9
10
11
12
13
| package main
import (
"fmt"
"io"
"os"
)
func main() {
// 读取所有输入直到 EOF
input, _ := io.ReadAll(os.Stdin)
fmt.Printf("输入内容:\n%s", input)
}
|
使用建议
简单输入
- 使用
fmt.Scan
系列函数 - 适合基本的用户输入
多行输入
- 使用
bufio.Scanner
- 适合处理文本文件或复杂输入
精确控制
- 使用
bufio.Reader
- 适合需要特殊输入处理的场景
完整输入流
- 使用
io.ReadAll
- 适合处理管道或重定向输入
参考资源