<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用Go語言開發(fā)一款簡易目錄生成器

          共 4130字,需瀏覽 9分鐘

           ·

          2021-01-21 03:41

          點(diǎn)擊上方“Go語言進(jìn)階學(xué)習(xí)”,進(jìn)行關(guān)注

          回復(fù)“Go語言”即可獲贈(zèng)從入門到進(jìn)階共10本電子書

          日暮漢宮傳蠟燭,輕煙散入五侯家。

          前言

          有時(shí)候,我看著我的目錄,或者我想找個(gè)文件時(shí),尤其是目錄很多時(shí),總是有點(diǎn)難受。

          比如這個(gè)目錄,是我的一個(gè)教程目錄。

          但是我并不能一目了然的知道每個(gè)文件夾下都有啥,并且每次找一個(gè)文件也很費(fèi)事。

          所以,基于上述的需求,使用Go語言,終于擼了個(gè)目錄生成器,感覺還行。

          實(shí)現(xiàn)的效果

          通過編寫的腳本,可以將目錄整合成.txt文件,并且下級(jí)目錄使用4個(gè)空格縮進(jìn)。

          代碼

          先別管怎么實(shí)現(xiàn)的,先看代碼。

          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 "生成相同字符的個(gè)數(shù)"// @param char byte "生成相同字符的字符"// @param current_tier int "當(dāng)前層數(shù)"// @param end_tier int "終止層數(shù)"// @param fileObj int "文件對(duì)象"// @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("錯(cuò)誤:目錄錯(cuò)誤") return} for _, file := range files { var name = file.Name() //生成指定數(shù)目的相同符號(hào) var plac = GenderNSymbol(char, count) //符號(hào)+目錄 var sname = fmt.Sprintf("%s%s\n", plac, name) //輸出當(dāng)前目錄 fileObj.WriteString(sname) //fmt.Println(sname) //判斷是否為目錄,如果是,繼續(xù)下次遞歸 var isDir = file.IsDir() if isDir { //拼接傳入的目錄和循環(huán)的當(dāng)前目錄 var nerPaht = filepath.Join(path, name) GenderDirTree(nerPaht, count+4, char, current_tier, end_tier, fileObj) }}}
          func main() { //終止層數(shù),0表示無限層,>0表示指定層數(shù) var end_tier int //輸入的目錄 //var path = `D:\0_教程\易錦教程` var path string flag.StringVar(&path, "path", "", "目錄") flag.IntVar(&end_tier, "tier", 0, "終止層數(shù)") flag.Parse() //文件對(duì)象 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)}

          去掉注釋,其實(shí)也就30行代碼,就實(shí)現(xiàn)了這個(gè)功能。

          實(shí)現(xiàn)的功能

          • 自定義要生成的目錄。

          • 自定義生成目錄終止的層數(shù)。

          打包

          go build main.go

          -help

          采用flag包動(dòng)態(tài)控制參數(shù),參數(shù)如下。

          d:>main.exe -hUsage of main.exe:  -path string        目錄  -tier int        終止層數(shù)

          運(yùn)行

          語法

          main.exe -path <要生成的目錄> -tier <終止層級(jí)>注意:-tier,終止層數(shù),0表示無限層,>0表示指定層數(shù),默認(rèn)為0

          示例

          此處-tier指定的是0,表示無限制生成,如果指定是1,就表示生成一層。

          結(jié)果

          會(huì)在要生成的目錄下,多出一個(gè)目錄.txt。

          打開如下

          主要代碼理解

          flag

          fileObj

          判斷是否為目錄,遞歸

          總結(jié)

          本次更像是日常使用中,為了解決實(shí)際問題的腳本,其實(shí)腳本使用Python更好。

          但是Go有一個(gè)更大的優(yōu)勢(shì)就是可以編譯為exe。

          這次的難點(diǎn)主要是理解遞歸,自己調(diào)自己!

          如果在操作過程中有任何問題,記得下面留言,我們看到會(huì)第一時(shí)間解決問題。

          如果你覺得文章還可以,記得點(diǎn)贊留言支持我們哈。感謝你的閱讀,有問題請(qǐng)記得在下方留言噢~

          想學(xué)習(xí)更多關(guān)于Python的知識(shí),可以參考學(xué)習(xí)網(wǎng)址:http://pdcfighting.com/,點(diǎn)擊閱讀原文,可以直達(dá)噢~

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Go學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬水千山總是情,點(diǎn)個(gè)【在看】行不行

          瀏覽 28
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产高清免费无码 | 国产精品爽爽久久久久久 | 午夜1级操逼视频 | 日本一级免费视频 | 操逼视频91 |