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

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

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

前言

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

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

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

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

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

实现的效果

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

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

代码

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

实现的功能

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

打包

go build main.go

-help

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

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

运行

语法

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

示例

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

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

结果

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

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

打开如下

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

主要代码理解

flag

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

fileObj

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

判断是否为目录,递归

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

总结

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 6月iOS设备好评榜:第一蝉联榜首近一年

    作为安兔兔各种榜单里变化最小的那个,2023年6月的iOS好评榜和上个月相比没有任何排名上的变化,仅仅是部分设备好评率的下降,长年累月的用户评价和逐渐退出市场的老款机器让这
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 华为和江淮汽车合作开发百万元问界MPV?双方回应来了

    8月1日消息,郭明錤今天在社交平台发文称,华为正在和江淮汽车合作,开发售价在100万元的问界MPV,预计在2024年第2季度量产,销量目标为上市首年交付5万辆。
  • 引领旗舰级影像能力向中端机普及 OPPO K11 系列发布 1799 元起

    7月25日,OPPO正式发布K系列新品—— OPPO K11 。此次 K11 在中端手机市场长期被忽视的影像板块发力,突破性地搭载索尼 IMX890 旗舰大底主摄,支持 OIS
  • 英特尔Xe HPG游戏显卡:拥有512EU,单风扇版本

    据10 月 30 日外媒 TheVerge 消息报道,英特尔 Xe HPG Arc Alchemist 的正面实被曝光,不仅拥有 512 EU 版显卡,还拥有 128EU 的单风扇版本。另外,这款显卡 PCB
Top