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

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

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

前言

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

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

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

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

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

实现的效果

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

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

代码

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

实现的功能

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

打包

go build main.go

-help

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

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

运行

语法

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

示例

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

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

结果

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

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

打开如下

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

主要代码理解

flag

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

fileObj

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

判断是否为目录,递归

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

总结

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • 一年经验在二线城市面试后端的经验分享

    一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 一文搞定Java NIO,以及各种奇葩流

    一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 使用AIGC工具提升安全工作效率

    使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
Top