您现在的位置是:亿华云 > IT科技

手把手教你用Go语言开发一款简易目录生成器

亿华云2025-10-03 06:58:58【IT科技】3人已围观

简介前言有时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。比如这个目录,是我的一个教程目录。但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。所以,基于上

前言

有时候,手把手教生成我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。

比如这个目录,用Go语言开是我的一个教程目录。

但是发款我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。

所以,简易基于上述的需求,使用Go语言,终于撸了个目录生成器,感觉还行。

实现的目录效果

通过编写的脚本,可以将目录整合成.txt文件,并且下级目录使用4个空格缩进。

代码

先别管怎么实现的手把手教生成,先看代码。

package main import (     "bytes"     "flag"     "fmt"     "io/ioutil"     "os"     "path/filepath" ) func GenderNSymbol(char byte,用Go语言开 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行代码,就实现了这个功能。

实现的发款功能

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

打包

go build main.go 

-help

采用flag包动态控制参数,目录参数如下。

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

运行

语法

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

示例

此处-tier指定的云南idc服务商是0,表示无限制生成,如果指定是1,就表示生成一层。

结果

会在要生成的用Go语言开目录下,多出一个目录.txt。

打开如下

主要代码理解

flag

fileObj

判断是发款否为目录,递归

总结

本次更像是日常使用中,为了解决实际问题的脚本,其实脚本使用Python更好。

但是简易Go有一个更大的优势就是可以编译为exe。

这次的目录难点主要是理解递归,自己调自己!

很赞哦!(9687)