最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 16:26:55
文檔

使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose

使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose:摘要 本文介紹用于構(gòu)建命令行程序的開源工具 mkideal/cli 。golang標準庫 flag 是官方自帶的用于命令行參數(shù)解析的實用庫,而本文介紹的 cli 的主要功能基本與 flag 庫相同,但是提供相對簡潔友好的用法以及更多實用工具。 cli 的主要特性包括: 基
推薦度:
導讀使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose:摘要 本文介紹用于構(gòu)建命令行程序的開源工具 mkideal/cli 。golang標準庫 flag 是官方自帶的用于命令行參數(shù)解析的實用庫,而本文介紹的 cli 的主要功能基本與 flag 庫相同,但是提供相對簡潔友好的用法以及更多實用工具。 cli 的主要特性包括: 基

摘要

本文介紹用于構(gòu)建命令行程序的開源工具 mkideal/cli 。golang標準庫 flag 是官方自帶的用于命令行參數(shù)解析的實用庫,而本文介紹的 cli 的主要功能基本與 flag 庫相同,但是提供相對簡潔友好的用法以及更多實用工具。 cli 的主要特性包括:

  • 基于golang的tag和反射實現(xiàn)。
  • 參數(shù)類型和范圍檢查,以及自定義的驗證函數(shù)。
  • 支持短格式和長格式的flag像 -h 和 --help 。
  • 支持指定默認值,甚至是以環(huán)境變量為默認值。
  • 支持數(shù)組和map為參數(shù)。
  • 友好的幫助顯示。
  • ……
  • cli 開源在github上 https://github.com/mkideal/cli

    入門介紹

    命令行程序雖然沒有華麗的界面,但是在服務器端,命令行程序是不可或缺的,而且在很多時候比圖形界面更加好用。在unix/linux操作系統(tǒng)上命令行程序極其常見,系統(tǒng)上預裝大量程序。 cli 這個工具正是用來便捷構(gòu)建這種命令行程序的go語言庫。 先看一個簡單的示例:

    package mainimport (	"github.com/mkideal/cli")type argT struct {	cli.Helper}func main() {	cli.Run(&argT{}, func(ctx *cli.Context) error {	argv := ctx.Argv().(*argT)	if argv.Help {	ctx.WriteUsage()	} else {	ctx.String("hello\n")	}	return nil	})}

    編譯運行這段代碼

    $ go build -o app$ ./apphello$ ./app -hOptions: -h, --help display help

    當然這段代碼沒有任何實質(zhì)功能。代碼第12行調(diào)用 cli 的 Run 函數(shù),函數(shù)原型如下:

    func Run(argv interface{}, fn func(*Context) error, descs ...string)

    參數(shù) argv 在執(zhí)行時會通過解析命令行參數(shù)來賦值,然后塞進 Context 對象,最終傳遞給回調(diào)函數(shù) fn 。在回調(diào)函數(shù)中通過 ctx.Argv() 獲得 argv 。

    本示例代碼的 argT 繼承于 cli.Helper ,它的定義如下:

    type Helper struct { Help bool `cli:"!h,help" usage:"display help"`}

    好了,下面創(chuàng)建一個實用一點的程序來做更詳細的講解。

    一個簡易的http服務器

    package mainimport (	"fmt"	"net/http"	"github.com/mkideal/cli")type argT struct {	cli.Helper	Host string `cli:"H,host" usage:"specify host" dft:"0.0.0.0"`	Port uint16 `cli:"p,port" usage:"specify port" dft:"8080"`	Dir string `cli:"d,dir" usage:"static files directory" dft:"./"`}func main() {	cli.SetUsageStyle(cli.ManualStyle)	cli.Run(new(argT), func(ctx *cli.Context) error {	argv := ctx.Argv().(*argT)	if argv.Help {	ctx.WriteUsage()	return nil	}	http.Handle("/", http.FileServer(http.Dir(argv.Dir)))	addr := fmt.Sprintf("%s:%d", argv.Host, argv.Port)	ctx.String("listening on %s\n", addr)	http.ListenAndServe(addr, nil)	return nil	})}

    在這個例子里,參數(shù)對象 argT 多了幾個有用的字段: Host Port Dir

    還是先編譯運行一下

    $ go build -o httpd$ ./httpd -h

    好了,現(xiàn)在創(chuàng)建一個 html 目錄,然后新建一個文件 index.html ,內(nèi)容為

    Hello, this is my http server!

    然后啟動 http server

    $ mkdir html$ echo "

    Hello, this is my http server!

    " > html/index.html$ ./httpd -d htmllistening on 0.0.0.0:8080

    現(xiàn)在通過瀏覽器訪問 127.0.0.1:8080 就可以看到

    你還可以指定別的端口,而非默認的端口8080,比如指定端口為3000

    可以這樣啟動

    $ ./httpd -d html --port=3000

    或者

    $ ./httpd -d html --port 3000

    或者

    $ ./httpd -d html -p=3000

    或者

    $ ./httpd -d html -p 3000

    接下來講述一下出現(xiàn)在參數(shù)定義中的標簽,它們是解析參數(shù)以及顯示幫助時器關(guān)鍵作用的因素。

    標簽cli,usage,dft

    cli 支持4個標簽

  • cli - 參數(shù)flag名,如示例中的 cli:"h,help" cli:"H,host" 等
  • usage - 參數(shù)使用描述,是會顯示在幫助中的文本
  • dft - 指定參數(shù)默認值,可以指定環(huán)境變量為默認值,比如這樣 dft:"$HOME"
  • name - 參數(shù)引用名,并無實質(zhì)功能
  • 創(chuàng)建命令行程序的命令行工具 clier goplus

    clier 是 mkideal/cli 下的一個命令行程序,它也是使用 cli 構(gòu)建的。 clier 用于創(chuàng)建一條命令,比如這樣

    $ clier hello$ clier -s "this is hello command's description" hello

    goplus 的 new 子命令可以構(gòu)建完整的基于 cli 的命令行程序。使用示例

    $ goplus new hello # 最基本的單命令程序$ goplus new -t http httpd # 通過 `-t` 參數(shù)指定程序類型為`http`$ goplus new -t tree demo # 基本的多命令程序

    本文只是一個 cli 的簡要介紹。下面幾篇是關(guān)于 cli 的更詳細的介紹

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose

    使用go構(gòu)建命令行程序的快捷之道_html/css_WEB-ITnose:摘要 本文介紹用于構(gòu)建命令行程序的開源工具 mkideal/cli 。golang標準庫 flag 是官方自帶的用于命令行參數(shù)解析的實用庫,而本文介紹的 cli 的主要功能基本與 flag 庫相同,但是提供相對簡潔友好的用法以及更多實用工具。 cli 的主要特性包括: 基
    推薦度:
    標簽: 快捷鍵 快捷 html
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top