本次课后作业旨在利用 GO 语言开发一个具备特定功能的小程序,以强化对 GO 语言工程实践应用的理解与掌握。以下详述实现思路、展示关键代码并梳理实践路径。 一、实现思路 作业要求构建一个简易的文件管理统计工具,实现对指定目录下各类文件的数量统计及大小汇总。整体思路是先深度遍历给定目录,借助 GO 的标准库 filepath.Walk 函数,它能递归访问目录下子目录与文件。在遍历过程中,用 map 数据结构分别记录不同文件扩展名对应的文件数量,例如 .txt 文件数量、 .jpg 文件数量等,方便后续统计与查询。对于文件大小汇总,以字节为单位实时累加,每访问到一个文件,通过 os.Stat 获取文件信息,提取其大小属性并累加到总大小变量中。同时,设计合理的打印输出函数,将统计结果以清晰直观的格式展示,包含各类型文件数量及总文件大小情况。 二、关键代码示例 package main
import ( "fmt" "io/fs" "path/filepath" "strings" )
// 存储文件扩展名与数量对应关系 var fileTypeCount = make(map[string]int) var totalSize int64
func main() { rootDir := "." // 默认当前目录,可按需修改为指定路径 err := filepath.Walk(rootDir, countFiles) if err!= nil { fmt.Println("遍历目录出错:", err) return } printResults() }
func countFiles(path string, info fs.DirEntry, err error) error { if err!= nil { return err } if info.IsDir() { return nil } fileExt := strings.ToLower(filepath.Ext(info.Name())) fileTypeCount[fileExt]++ fileInfo, _ := info.Info() totalSize += fileInfo.Size() return nil }
func printResults() { fmt.Printf("文件类型统计结果:\n") for ext, count := intstring, int { fmt.Printf("%s 文件数量: %d\n", ext, count) } fmt.Printf("总文件大小: %d 字节\n", totalSize) }
上述代码, main 函数作为入口,设定起始遍历目录后调用 filepath.Walk ,回调函数 countFiles 处理每个文件,提取扩展名统计并累加大小, printResults 最终格式化输出结果。 三、实践路径记录
- 环境搭建:确保 GO 语言开发环境正确安装配置,设置好 GOPATH 、 GOROOT 变量,安装必要编辑器(如 VS Code 搭配 GO 插件),方便代码编写、自动补全与错误提示。
- 功能模块实现:按思路分步编码,先实现目录遍历基础框架,测试能否正确访问文件;接着填充统计逻辑,仔细调试 map 操作与文件大小计算,借助 fmt.Println 打印中间变量排查错误;最后完善输出显示,使其格式整齐规范。
- 测试优化:在不同规模目录下测试,含多层子目录、多种文件类型场景,观察结果准确性,针对性能瓶颈(如大规模目录遍历慢),考虑优化算法或利用并发特性提升效率,持续迭代改进代码,圆满达成作业要求,深化 GO 语言工程实践能力。