>  기사  >  백엔드 개발  >  Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.

Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-25 16:55:53777검색

머리말

가끔 디렉토리를 볼 때, 또는 파일을 찾고 싶을 때, 특히 디렉토리가 많을 때는 항상 조금 불편한 느낌이 듭니다.

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 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.

结果

디렉토리 에 생성할 이 하나 더 있습니다. 目录.txt

Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.

다음과 같이 열기


Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.메인 코드 이해


flag

Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.fileObj


Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다. 디렉토리, 재귀적으로


Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다. 요약


이번에는 일상적으로 사용하는 스크립트에 가깝습니다. 실제 문제를 해결하려면 Python을 스크립트로 사용하는 것이 실제로 더 좋습니다.

하지만 Go의 더 큰 장점은 exe으로 컴파일할 수 있다는 점입니다.

위 내용은 Go 언어를 사용하여 간단한 디렉토리 생성기를 개발하는 방법을 단계별로 가르칩니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제