Go语言实战案例 - 找出切片中的最大值与最小值
实用性案例 | 算法基础 | 初学者友好
一、案例目标
实现一个程序,接收用户输入的一组整数(使用切片存储),然后找出其中的最大值与最小值,并打印结果。
二、 应用场景举例
- • 数据分析中找出极值(最高温度、最低成绩)
- • 统计程序中的最小成本和最大利润
- • 游戏、金融、监控等场景中的实时指标筛选
三、 涉及知识点
知识点 | 说明 |
切片 []int 使用 | 动态数组处理数据序列 |
for 循环遍历 | 遍历每个元素 |
条件判断 if | 判断是否是最大或最小值 |
初始值策略 | 设置最大/最小初始值是关键 |
四、🛠 功能需求
- 1. 用户输入一组整数(以空格分隔);
- 2. 将其转换为整数切片;
- 3. 遍历切片,找出最大值与最小值;
- 4. 打印原始切片和结果;
- 5. 处理非法输入(如非数字字符);
五、 完整示例代码
package mainimport ("bufio""fmt""os""strconv""strings"
)func main() {fmt.Println("请输入一组整数(空格分隔):")reader := bufio.NewReader(os.Stdin)input, _ := reader.ReadString('\n')numbers, err := parseInput(input)if err != nil || len(numbers) == 0 {fmt.Println("输入有误,请输入一组有效的整数。")return}fmt.Println("输入的切片:", numbers)max, min := findMaxMin(numbers)fmt.Println("最大值:", max)fmt.Println("最小值:", min)
}// 字符串转整数切片
func parseInput(input string) ([]int, error) {fields := strings.Fields(input)var result []intfor _, s := range fields {n, err := strconv.Atoi(s)if err != nil {return nil, err}result = append(result, n)}return result, nil
}// 查找最大值和最小值
func findMaxMin(nums []int) (int, int) {max := nums[0]min := nums[0]for _, n := range nums {if n > max {max = n}if n < min {min = n}}return max, min
}
六、 示例运行
输入示例:
请输入一组整数(空格分隔):
45 3 67 88 12 0 -5 99
输出结果:
输入的切片: [45 3 67 88 12 0 -5 99]
最大值: 99
最小值: -5
七、 核心解析
- 1. 初始化最大/最小值为切片第一个元素:
max := nums[0] min := nums[0]
- 2. 遍历并比较每个元素:
for _, n := range nums {if n > max { max = n }if n < min { min = n } }
- 3. 注意切片为空的情况需提前处理。
八、拓展练习建议
- • 输出最大值和最小值出现的位置(索引);
- • 同时计算平均值;
- • 支持浮点数输入(改用
[]float64
); - • 排除负数,只在正数中查找最大值;
- • 将功能封装为通用工具函数供其他模块调用;
九、常见问题
问题 | 原因 | 建议解决 |
程序 panic 空切片 | 没有输入或未检查长度 | 在调用前判断切片是否为空 |
输入字符串报错 | 包含非数字字符 | 提前清洗输入或添加错误提示 |
最大最小值为0 | 初始化为0不准确 | 应初始化为切片第一个值 |
小结
本案例是最常见、最实用的遍历算法之一,学习要点包括:
- • 如何从切片中提取信息(极值)
- • 逻辑清晰的比较流程
- • 错误处理与用户输入的解析
这些技巧将在你后续写数据处理、排序、图表可视化、甚至机器学习数据预处理时频繁使用。