Gox語言中下載文件-GX50.1

Gox語言中可以使用基本的Go語言標(biāo)準(zhǔn)包(net/http包)進(jìn)行文件下載,也可以使用內(nèi)置的github.com/topxeq/tk包中的DownloadFile函數(shù)進(jìn)行下載。另一種方法,也是可以更精細(xì)地控制的方法,是使用內(nèi)置的github.com/cavaliercoder/grab包進(jìn)行更方便、功能更全面的下載。

關(guān)于github.com/cavaliercoder/grab包的詳細(xì)試用可以參看該包的參考文檔。

最簡(jiǎn)單的下載代碼如下:

// 設(shè)定github.com/cavaliercoder/grab包的簡(jiǎn)稱為grab
grab = github_cavaliercoder_grab

// 調(diào)用grab的Get函數(shù)進(jìn)行簡(jiǎn)單的下載
resp, err = grab.Get(".", "https://github.com/cmderdev/cmder/releases/download/v1.3.16/cmder_mini.zip")

// 判斷下載中是否出錯(cuò)
if err != nil {

    plerr(err)

    exit()

}

// 輸出保存的本地文件名
println("Download saved to", resp.Filename)

pass()

實(shí)際有效代碼僅一行,就實(shí)現(xiàn)了功能完整的下載,下載還支持?jǐn)帱c(diǎn)續(xù)傳的功能。

如果希望在下載時(shí)顯示更多的信息,例如下載了多少字節(jié)、下載百分比等等,可以參考下面的代碼:

grab = github_cavaliercoder_grab

client := grab.NewClient()
req, _ := grab.NewRequest(".", "https://github.com/cmderdev/cmder/releases/download/v1.3.16/cmder_mini.zip")

fmt.Printf("Downloading %v...\n", req.URL())
resp := client.Do(req)
fmt.Printf("  %v\n", resp.HTTPResponse.Status)

// 啟動(dòng)一個(gè)線程,每個(gè)100毫秒輸出一次下載狀態(tài)
go func() {
    for {
        tk.SleepMilliSeconds(100)
        fmt.Printf("\r  transferred %v / %v bytes (%.2f%%)",
                resp.BytesComplete(),
                resp.Size(),
                100*resp.Progress())
    }
}()

err := resp.Err()

if err != nil {
    fmt.Fprintf(os.Stderr, "Download failed: %v\n", err)
    os.Exit(1)
}

fmt.Printf("Download saved to ./%v \n", resp.Filename)

pass()

其中,使用了grab的NewClient函數(shù)來新建一個(gè)下載客戶端,然后最重要的是啟動(dòng)一個(gè)線程來定時(shí)輸出下載狀態(tài),代碼比較好懂,因此沒有過多的解釋。代碼運(yùn)行的中間效果如下:

C:\Users\Administrator>gox -gopath downloadFile.gox
Downloading https://github.com/cmderdev/cmder/releases/download/v1.3.16/cmder_mini.zip...
  200 OK
  transferred 1583695 / 9584905 bytes (16.52%)

可以看到,使用Gox下載文件是非常方便的。

注意:

  • Gox語言是脫胎于Go語言(Golang)的開源腳本語言,解釋執(zhí)行,但相比Go語言更貼近高級(jí)語言,語法硬性限制也少一些;是一門偏向快速應(yīng)用的語言,也可以說是一個(gè)集成工具;

  • Gox語言主要優(yōu)勢(shì)有三點(diǎn):

    • 第一,Gox語言本身只有一個(gè)可執(zhí)行文件,綠色免配置,下載即可使用,無需安裝Go語言環(huán)境,無需編譯,非常適合快速制作原型以及云服務(wù)器上的遠(yuǎn)程開發(fā);
    • 第二,Gox中可以直接使用絕大多數(shù)Go語言標(biāo)準(zhǔn)庫中的對(duì)象和方法函數(shù),也內(nèi)置了很多常用、優(yōu)秀的第三方庫,充分發(fā)揮Go語言多年積累的資源優(yōu)勢(shì);
    • 第三,與很多其他主流語言不同,Gox語言著力解決了GUI圖形界面編程的問題,內(nèi)置了基于Fyne、Giu(imgui)、LCL、Sciter的多套圖形界面編程庫,直接可以進(jìn)行快捷高效的圖形界面開發(fā)(LCL、Sciter只需分別下載一個(gè)動(dòng)態(tài)鏈接庫文件,執(zhí)行和分發(fā)時(shí)附帶上即可),特別適合編寫演示原型系統(tǒng)。

作為腳本語言,Gox語言性能肯定不如Go語言這樣的編譯型語言快,但由于Gox語言與Go語言的緊密聯(lián)系,Gox語言編寫的腳本可以很容易的改寫成Go語言代碼,編譯執(zhí)行后就可以發(fā)揮Go語言的速度優(yōu)勢(shì)了。因此,Gox語言也比較適合做初期的Go語言調(diào)試,還有一個(gè)更直接的方式是使用Gotx(在Gox官網(wǎng)上也有下載),這是使用完全和Go語言一樣語法的解釋器,可以理解成集成了Go語言標(biāo)準(zhǔn)庫和不少第三方庫的解釋執(zhí)行的Go語言,一樣也不需要搭建Go語言環(huán)境。Gotx與Gox的區(qū)別在于,Gotx仍然遵循Go語言的文法,代碼相對(duì)復(fù)雜一些,限制也多一些,但改寫回Go語言準(zhǔn)備編譯執(zhí)行時(shí),基本上沒有成本。

Gox的官網(wǎng)在這里,也可以在瀏覽器搜索引擎中直接搜索“gox語言”,Github頁面在這里,在這里可以看到很多Gox語言的學(xué)習(xí)指南和實(shí)際應(yīng)用實(shí)例。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容