大型專案中少不了資料公升級,如果採用web服務,一來不夠安全,二來資料量大的時候也會出超時的情況。這時使用命令列是比較合適的方式了。
web專案一般採用mvc模式,對於命令列有嗎?
對於命令列則有command(命令)和flag(引數),golang自帶了flag包,不過功能不夠強大,這裡我們使用第三方包cobra
具體用法可以參考官方文件,我就不細說了。
按照官方的結構,不好實現自動註冊,每次增加新的命令或資料夾不好管理,需要改動**。經過一番思考,發現可以利用golang的init機制來達到我的目的。
目錄結構如下:
執行效果如圖:
其中rootcmd.go 中初始化根命令rootcmd
,同時封裝兩個函式,乙個是新增子命令的,乙個是執行的。
}//封裝了兩個函式
func addcommand(cmd *cobra.command)
func execute() error
對於子命令,我可以匯入rootcmd所在的包,然後在init函式裡,呼叫rootcmd.addcommand
比如updatecmd.go
)// 註冊命令
func init()
var usercmd = &cobra.command,
}對於main包,使用"_",匯入子命令資料夾,和rootcmd,並呼叫 rootcmd.execute()即可。
這樣新增新的命令不增加新的package時,就不需要更改cli.go,實現了自動註冊的目的。
}完整的**在此
golang命令行庫cobra的使用
golang命令行庫cobra的使用 一 簡介 cobra是乙個golang庫,它提供了乙個簡單的程式設計介面來建立類似於git和go工具的強大的現代cli介面。cobra同時提供了乙個工具,幫程式設計師快速實現cli框架。cobra具有如下強大的功能 2.完全相容posix命令列模式 3.巢狀子命...
golang命令列解析
golang從誕生到現在不到十年,使用者量確一路高漲,這個跟golang系統包提供很多開發者經常要用到的功能多少有些關係。乙個更新的語言,在設計的時候會更多的結合眾多開發者常見的需求,將常用的東西放到基礎包,可以避免大量造輪子。golang基礎包中flag包就是用來解決常見的命令列解析問題。下面來介...
Golang 命令列字型顏色
package main import flag syscall func main cc flag.int i 2,type int flag.parse count int 11 objdll syscall.newlazydll kernel32.dll colorhandle objdll....