手把手教你用Go语言开发一款简易目录生成器
2024-01-08 09:15:56 软件 179观看
摘要前言有时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。比如这个目录,是我的一个教程目录。但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。所以,基于上述的需

前言

时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。buC28资讯网——每日最新资讯28at.com

buC28资讯网——每日最新资讯28at.com

比如这个目录,是我的一个教程目录。buC28资讯网——每日最新资讯28at.com

但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。buC28资讯网——每日最新资讯28at.com

所以,基于上述的需求,使用Go语言,终于撸了个目录生成器,感觉还行。buC28资讯网——每日最新资讯28at.com

实现的效果

buC28资讯网——每日最新资讯28at.com

通过编写的脚本,可以将目录整合成.txt文件,并且下级目录使用4个空格缩进。buC28资讯网——每日最新资讯28at.com

代码

先别管怎么实现的,先看代码。buC28资讯网——每日最新资讯28at.com

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 string    flag.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行代码,就实现了这个功能。buC28资讯网——每日最新资讯28at.com

实现的功能

  • 自定义要生成的目录。
  • 自定义生成目录终止的层数。

打包

go build main.go

-help

用flag包动态控制参数,参数如下。buC28资讯网——每日最新资讯28at.com

d:>main.exe -hUsage of main.exe:  -path string        目录  -tier int        终止层数

运行

语法

main.exe -path <要生成的目录> -tier <终止层级>注意:-tier,终止层数,0表示无限层,>0表示指定层数,默认为0

示例

此处-tier指定的是0,表示无限制生成,如果指定是1,就表示生成一层。buC28资讯网——每日最新资讯28at.com

buC28资讯网——每日最新资讯28at.com

结果

会在要生成的目录下,多出一个目录.txt。buC28资讯网——每日最新资讯28at.com

buC28资讯网——每日最新资讯28at.com

打开如下

buC28资讯网——每日最新资讯28at.com

主要代码理解

flag

buC28资讯网——每日最新资讯28at.com

fileObj

buC28资讯网——每日最新资讯28at.com

判断是否为目录,递归

buC28资讯网——每日最新资讯28at.com

总结

本次更像是日常使用中,为了解决实际问题的脚本,其实脚本使用Python更好。buC28资讯网——每日最新资讯28at.com

但是Go有一个更大的优势就是可以编译为exe。buC28资讯网——每日最新资讯28at.com

这次的难点主要是理解递归,自己调自己!buC28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-57881-0.html手把手教你用Go语言开发一款简易目录生成器

声明:本网页内容旨在传播知识,不代表本站观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。

显示全文

上一篇:掌握Python之道:正确学习官方文档的有效方法

下一篇:在 Rust 编程中使用多线程

最新热点