当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-01-08 09:15:56 278观看
导读前言有时候,我看着我的目录,或者我想找个文件时,尤其是目录很多时,总是有点难受。比如这个目录,是我的一个教程目录。但是我并不能一目了然的知道每个文件夹下都有啥,并且每次找一个文件也很费事。所以,基于上述的需

前言

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

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

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

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

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

实现的效果

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

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

代码

先别管怎么实现的,先看代码。oZM28资讯网——每日最新资讯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行代码,就实现了这个功能。oZM28资讯网——每日最新资讯28at.com

实现的功能

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

打包

go build main.go

-help

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

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

运行

语法

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

示例

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

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

结果

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

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

打开如下

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

主要代码理解

flag

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

fileObj

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

判断是否为目录,递归

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

总结

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

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

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

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

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

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

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • JavaScript 混淆及反混淆代码工具

    介绍在我们开始学习反混淆之前,我们首先要了解一下代码混淆。如果不了解代码是如何混淆的,我们可能无法成功对代码进行反混淆,尤其是使用自定义混淆器对其进行混淆时。什么是混
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • Flowable工作流引擎的科普与实践

    一.引言当我们在日常工作和业务中需要进行各种审批流程时,可能会面临一系列技术和业务上的挑战。手动处理这些审批流程可能会导致开发成本的增加以及业务复杂度的上升。在这
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
Top