本例的目的很明確捏萍,就是獲取某個指定的目錄(文件夾)下所有的文件列表往堡,包括其中的子目錄中的尚揣。下面直接給代碼示例比规,其中有詳細(xì)的解釋:
// 從命令行獲取要讀取文件列表的目錄,默認(rèn)為“.”讥邻,即當(dāng)前目錄
pathT = getSwitch(argsG, "-dir=", ".")
// 調(diào)用內(nèi)置函數(shù)getFileList獲取文件列表
// 除了第一個參數(shù)表示目錄外迫靖,其他參數(shù)都是可選
// 有-recursive表示也遞歸獲取所有子目錄下的文件
// -pattern=用于指定獲取文件的名字匹配模板,*代表獲取所有文件兴使,*.txt表示所有擴(kuò)展名為.txt的文件
// -exclusive=用于指定排除的文件名匹配模板
// 有-verbose開關(guān)表示輸出每一個文件路徑(所有讀到的系宜,而不是最終過濾過的)
listT = getFileList(pathT, "-recursive", "-pattern=*", "-exclusive=*.txt", "-verbose")
// 將文件列表轉(zhuǎn)換成JSON格式文本輸出
// 其中toJSON函數(shù)用于將任意對象轉(zhuǎn)換為JSON格式
// 除第一個參數(shù)外都是可選參數(shù),-sort表示編碼的字段按排序(否則Go語言中字段是會隨機排序的)
// -indent表示輸出帶縮進(jìn)的多行JSON格式
pl("%v", toJSON(listT, "-sort", "-indent"))
// 遍歷得到的文件列表发魄,并做一下比較友好的輸出
// 其中v是每次遍歷中獲得的枚舉對象盹牧,就是一條文件信息記錄
// v["Name"], v.Size是對v中各個屬性字段的兩種訪問方式
for i, v = range listT {
pl("[%v] 文件名:%v,文件大欣住(字節(jié)):%v", i+1, v["Name"], v.Size)
}
執(zhí)行后輸出結(jié)果類似:
D:\tmp>gox getFileList.gox -dir=D:\goprjs\src\testwebview
D:\goprjs\src\testwebview
D:\goprjs\src\testwebview\go.mod
D:\goprjs\src\testwebview\go.sum
D:\goprjs\src\testwebview\testwebview.go
[
{
"Abs": "D:\\goprjs\\src\\testwebview\\go.mod",
"IsDir": "false",
"Mode": "-rw-rw-rw-",
"Name": "go.mod",
"Path": "D:\\goprjs\\src\\testwebview\\go.mod",
"Size": "173",
"Time": "20210708163913"
},
{
"Abs": "D:\\goprjs\\src\\testwebview\\go.sum",
"IsDir": "false",
"Mode": "-rw-rw-rw-",
"Name": "go.sum",
"Path": "D:\\goprjs\\src\\testwebview\\go.sum",
"Size": "6445",
"Time": "20210708163913"
},
{
"Abs": "D:\\goprjs\\src\\testwebview\\testwebview.go",
"IsDir": "false",
"Mode": "-rw-rw-rw-",
"Name": "testwebview.go",
"Path": "D:\\goprjs\\src\\testwebview\\testwebview.go",
"Size": "1904",
"Time": "20210708164007"
}
]
[1] 文件名:go.mod汰寓,文件大小(字節(jié)):173
[2] 文件名:go.sum苹粟,文件大杏谢(字節(jié)):6445
[3] 文件名:testwebview.go,文件大星断鳌(字節(jié)):1904
D:\tmp>
注意:
Gox語言是脫胎于Go語言(Golang)的開源腳本語言毛好,解釋執(zhí)行,但相比Go語言更貼近高級語言苛秕,語法硬性限制也少一些肌访;是一門偏向快速應(yīng)用的語言,也可以說是一個集成工具艇劫;
-
Gox語言主要優(yōu)勢有三點:
- 第一吼驶,Gox語言本身只有一個可執(zhí)行文件,綠色免配置店煞,下載即可使用蟹演,無需安裝Go語言環(huán)境,無需編譯浅缸,非常適合快速制作原型以及云服務(wù)器上的遠(yuǎn)程開發(fā)轨帜;
- 第二,Gox中可以直接使用絕大多數(shù)Go語言標(biāo)準(zhǔn)庫中的對象和方法函數(shù)衩椒,也內(nèi)置了很多常用蚌父、優(yōu)秀的第三方庫哮兰,充分發(fā)揮Go語言多年積累的資源優(yōu)勢;
- 第三苟弛,與很多其他主流語言不同喝滞,Gox語言著力解決了GUI圖形界面編程的問題,內(nèi)置了基于Sciter和WebView的圖形界面編程庫膏秫,直接可以進(jìn)行快捷高效的跨平臺圖形界面開發(fā)(Sciter只需下載一個動態(tài)鏈接庫文件右遭,WebView也僅在Windows系統(tǒng)下需要兩個DLL文件,執(zhí)行和分發(fā)時附帶上即可缤削,放置在系統(tǒng)路徑中或者與Gox主程序相同目錄下即可)窘哈,特別適合編寫演示原型系統(tǒng),也經(jīng)歷了一些中小型系統(tǒng)的檢驗亭敢,尤其是作為輕量級的微服務(wù)后臺滚婉。
作為腳本語言,Gox語言性能肯定不如Go語言這樣的編譯型語言快帅刀,但在大多數(shù)使用場景下性能也足夠用让腹。并且,由于Gox語言與Go語言的緊密聯(lián)系扣溺,Gox語言編寫的腳本可以很容易的改寫成Go語言代碼骇窍,編譯執(zhí)行后就可以發(fā)揮Go語言的速度優(yōu)勢了。因此锥余,Gox語言也比較適合做初期的Go語言調(diào)試腹纳。
Gox的官網(wǎng)在這里,也可以在瀏覽器搜索引擎中直接搜索“gox語言”驱犹,Github頁面在這里只估,在這里可以看到很多Gox語言的學(xué)習(xí)指南和實際應(yīng)用實例。