手把手教你用Go语言开发一款简易目录生成器
回复“Go语言”即可获赠从入门到进阶共10本电子书
日暮汉宫传蜡烛,轻烟散入五侯家。
前言
有时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。

比如这个目录,是我的一个教程目录。
但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。
所以,基于上述的需求,使用Go语言,终于撸了个目录生成器,感觉还行。
实现的效果

通过编写的脚本,可以将目录整合成.txt文件,并且下级目录使用4个空格缩进。
代码
先别管怎么实现的,先看代码。
package mainimport ("bytes""flag""fmt""io/ioutil""os""path/filepath")func GenderNSymbol(char byte, count int) string {symbolSince := bytes.Repeat([]byte{char}, count)var symbol = string(symbolSince)return symbol}// @title GenderDirTree// @description 生成目录树// @param path string "需要生成的目录"// @param count int "生成相同字符的个数"// @param char byte "生成相同字符的字符"// @param current_tier int "当前层数"// @param end_tier int "终止层数"// @param fileObj int "文件对象"// @return 无 无 "无"func GenderDirTree(path string, count int, char byte, current_tier int, end_tier int, fileObj *os.File) {if !(current_tier < end_tier) && end_tier != 0 {return}current_tier++files, err := ioutil.ReadDir(path)if err != nil {fmt.Println("错误:目录错误")return}for _, file := range files {var name = file.Name()//生成指定数目的相同符号var plac = GenderNSymbol(char, count)//符号+目录var sname = fmt.Sprintf("%s%s\n", plac, name)//输出当前目录fileObj.WriteString(sname)//fmt.Println(sname)//判断是否为目录,如果是,继续下次递归var isDir = file.IsDir()if isDir {//拼接传入的目录和循环的当前目录var nerPaht = filepath.Join(path, name)GenderDirTree(nerPaht, count+4, char, current_tier, end_tier, fileObj)}}}func main() {//终止层数,0表示无限层,>0表示指定层数var end_tier int//输入的目录//var path = `D:\0_教程\易锦教程`var path stringflag.StringVar(&path, "path", "", "目录")flag.IntVar(&end_tier, "tier", 0, "终止层数")flag.Parse()//文件对象var wDirPath = filepath.Join(path, "目录.txt")fileObj, _ := os.OpenFile(wDirPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)defer fileObj.Close()//生成目录树GenderDirTree(path, 0, ' ', 0, end_tier, fileObj)}
去掉注释,其实也就30行代码,就实现了这个功能。
实现的功能
自定义要生成的目录。
自定义生成目录终止的层数。
打包
go build main.go-help
采用flag包动态控制参数,参数如下。
d:>main.exe -hUsage of main.exe:-path string目录-tier int终止层数
运行
语法
main.exe -path <要生成的目录> -tier <终止层级>注意:-tier,终止层数,0表示无限层,>0表示指定层数,默认为0
示例
此处-tier指定的是0,表示无限制生成,如果指定是1,就表示生成一层。

结果
会在要生成的目录下,多出一个目录.txt。

打开如下

主要代码理解
flag

fileObj

判断是否为目录,递归

总结
本次更像是日常使用中,为了解决实际问题的脚本,其实脚本使用Python更好。
但是Go有一个更大的优势就是可以编译为exe。
这次的难点主要是理解递归,自己调自己!
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
如果你觉得文章还可以,记得点赞留言支持我们哈。感谢你的阅读,有问题请记得在下方留言噢~
想学习更多关于Python的知识,可以参考学习网址:http://pdcfighting.com/,点击阅读原文,可以直达噢~
------------------- End -------------------
往期精彩文章推荐:

欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Go学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
评论
