
本文详解如何在 go 1.5.2 中安全读取任意数量的整数输入、存储到切片中,并使用标准库高效排序,避免常见返回值缺失、切片越界和函数误用等错误。
本文详解如何在 go 1.5.2 中安全读取任意数量的整数输入、存储到切片中,并使用标准库高效排序,避免常见返回值缺失、切片越界和函数误用等错误。
在 Go 中实现“输入 → 存储 → 排序 → 输出”这一流程时,初学者常因忽略函数返回值、切片初始化方式及 sort 包的正确用法而报错。例如,原代码中 go_input() 无返回值却被用于 sort.Sort() 和 fmt.Println();A := []int{100} 创建的是含一个元素的固定切片,但循环中试图写入 N 个元素,必然导致 panic(运行时越界);此外,sort.Sort() 要求传入实现了 sort.Interface 的类型,而直接传函数调用既非法也无意义。
✅ 正确做法是:让输入函数返回一个动态构建的整数切片,并使用 sort.Ints() —— 这是专为 []int 设计的高效、简洁排序函数(自 Go 1.0 起即存在,完全兼容 Go 1.5.2)。
以下是修正后的完整可运行代码:
package main
import (
"fmt"
"sort"
)
// readInts 读取用户指定数量的整数,返回整数切片
func readInts() []int {
var N int
fmt.Print("请输入数字个数 N: ")
fmt.Scanf("%d", &N)
// 动态创建长度为 N 的切片(初始值全为 0)
nums := make([]int, N)
fmt.Printf("请依次输入 %d 个整数:\n", N)
for i := 0; i <p>? <strong>关键修正说明</strong>:</p>
- 使用 make([]int, N) 替代 []int{100},确保切片容量与输入数量匹配;
- readInts() 显式返回 []int,供后续逻辑复用;
- sort.Ints(nums) 是最简、最安全的整数切片排序方式,无需实现接口;
- 避免重复调用 readInts()(如原 i_Sort() 中多次调用),否则每次都会重新读取输入,逻辑错乱且不可预测。
⚠️ 注意事项:
- Go 1.5.2 的 fmt.Scanf 对输入格式敏感,建议输入时用空格或换行分隔数字;
- 生产环境应增加输入错误处理(如非数字输入),此处为教学精简;
- sort.Ints() 原地排序(修改原切片),若需保留原始顺序,请先 copy()。
掌握这一模式,即可稳健扩展至浮点数(sort.Float64s)、字符串(sort.Strings)或自定义结构体排序,是 Go 基础 I/O 与数据处理的典型范式。











