首頁  >  文章  >  後端開發  >  手把手教你用Go語言開發一款簡易目錄產生器

手把手教你用Go語言開發一款簡易目錄產生器

Go语言进阶学习
Go语言进阶学习轉載
2023-07-25 16:55:53774瀏覽

前言

有時候,我看著我的目錄,或者我想#找個檔案時,尤其是目錄很多時,總是有點難受。

手把手教你用Go語言開發一款簡易目錄產生器

例如這個目錄,是我的一個教學目錄。

但是我並不能一目了然的知道每個資料夾下都有啥,並且每次找一個文件也很費事。

所以,基於上述的需求,使用Go語言,終於擼了個目錄產生器,感覺還行。

實現的效果

手把手教你用Go語言開發一款簡易目錄產生器

#

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

代码

先别管怎么实现的,先看代码。

package main


import (
    "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, &#39; &#39;, 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指定的是0,表示无限制生成,如果指定是1,就表示生成一层。

手把手教你用Go語言開發一款簡易目錄產生器

结果

will be in the directory to be generated in , and there will be an extra directory.txt .

手把手教你用Go語言開發一款簡易目錄產生器

Open as follows

手把手教你用Go語言開發一款簡易目錄產生器

Main code understanding

flag

手把手教你用Go語言開發一款簡易目錄產生器

##fileObj

手把手教你用Go語言開發一款簡易目錄產生器

Determine whether it is a directory, recursively

手把手教你用Go語言開發一款簡易目錄產生器

##Summary


This time it is more like a script for daily use. In order to solve practical problems, it is actually better to use Python for the script.

But Go has a greater advantage that it can be compiled into exe.

以上是手把手教你用Go語言開發一款簡易目錄產生器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:Go语言进阶学习。如有侵權,請聯絡admin@php.cn刪除