Maison > Article > développement back-end > Vous apprendre étape par étape comment développer un générateur d'annuaire simple en utilisant le langage Go
Parfois, quand je regarde mon répertoire, ou que je veux trouver un fichier, surtout quand il y a beaucoup de répertoires, je me sens toujours un peu inconfortable.
Par exemple, ce répertoire est l'un de mes répertoires de tutoriels.
Mais je ne peux pas clairement savoir ce qu'il y a dans chaque dossier , et c'est très difficile de trouver un fichier à chaque fois.
Donc, sur la base des exigences ci-dessus, en utilisant le langage Go, j'ai finalement créé un générateur d'annuaire, qui fait du bien.
通过编写的脚本,可以将目录整合成.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, ' ', 0, end_tier, fileObj) }
去掉注释,其实也就30行代码,就实现了这个功能。
自定义要生成的目录。
自定义生成目录终止的层数。
go build main.go
采用flag
包动态控制参数,参数如下。
d:>main.exe -h Usage of main.exe: -path string 目录 -tier int 终止层数
语法
main.exe -path <要生成的目录> -tier <终止层级> 注意:-tier,终止层数,0表示无限层,>0表示指定层数,默认为0
示例
此处-tier
指定的是0,表示无限制生成,如果指定是1,就表示生成一层。
结果
Il y aura un supplémentaire dans l'annuaire à générer. 目录.txt
Compréhension du code principal
fileObj
Déterminer s'il s'agit d'un répertoire, récursivement
Résumé
Mais un plus grand avantage de Go est qu'il peut être compilé en exe
.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!