最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GO Cobra Termui庫(kù)開(kāi)發(fā)終端命令行小工具輕松上手

 更新時(shí)間:2024年01月08日 14:26:30   作者:南丞?PFinalClub  
這篇文章主要為大家介紹了GO語(yǔ)言開(kāi)發(fā)終端命令行小工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Golang實(shí)現(xiàn)命令行小工具

"看到有人用Rust寫(xiě)終端天氣查詢(xún)小工具,一時(shí)興起,用Golang也做了個(gè)命令行小工具,效果如下:"

其實(shí)用golang 來(lái)寫(xiě)終端小工具,還是很方便的,有許多可用的庫(kù)比如這里用到的 Cobra,Termui庫(kù).

Cobra 庫(kù)

cobra是一個(gè)命令行程序庫(kù),可以用來(lái)編寫(xiě)命令行程序。同時(shí),它也提供了一個(gè)腳手架, 用于生成基于 cobra 的應(yīng)用程序框架。非常多知名的開(kāi)源項(xiàng)目使用了 cobra 庫(kù)構(gòu)建命令行,如Kubernetes、Hugo、etcd等等等等。

安裝

go get github.com/spf13/cobra/cobra

注意: 安裝完成以后,先去 go/bin/ 下找找 看是否有這個(gè)命令

使用

新建一個(gè)項(xiàng)目文件夾 pf_tools 然后進(jìn)入項(xiàng)目中 執(zhí)行:

cobra-cli init

就會(huì)初始化一個(gè)命令項(xiàng)目,結(jié)構(gòu)如下:

├── LICENSE
├── README.md
├── cmd
│   ├── pfM.go
│   ├── pfWt.go
│   └── root.go
├── go.mod
├── go.sum
├── main.go
└── pak
    ├── mobile.go
    └── weather.go

其中, cmd 目錄中默認(rèn)生成 root.go 文件,代碼如下:

package cmd
import (
	"os"
	"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
	Use:   "pf_tools",
	Short: "pft",
	Long: `基于go開(kāi)發(fā)的 小工具集合
   - pft pf_wt 查詢(xún)天氣
   - pft pf_m 手機(jī)歸屬地查詢(xún)
`,
	Run: func(cmd *cobra.Command, args []string) {
		if len(args) == 0 {
			err := cmd.Help()
			if err != nil {
				return
			}
			return
		}
	},
}
func Execute() {
	err := rootCmd.Execute()
	if err != nil {
		os.Exit(1)
	}
}
func init() {
	rootCmd.Flags().BoolP("version", "v", false, "")
}

cobra.Command 代表一個(gè)命令,其各個(gè)屬性含義如下:

  • Use 是命令的名稱(chēng)。
  • Short 代表當(dāng)前命令的簡(jiǎn)短描述。
  • Long 表示當(dāng)前命令的完整描述。
  • Run 屬性是一個(gè)函數(shù),當(dāng)執(zhí)行命令時(shí)會(huì)調(diào)用此函數(shù)。

rootCmd.Execute() 是命令的執(zhí)行入口,其內(nèi)部會(huì)解析 os.Args[1:] 參數(shù)列表(默認(rèn)情況下是這樣,也可以通過(guò) Command.SetArgs 方法設(shè)置參數(shù)),然后遍歷命令樹(shù),為命令找到合適的匹配項(xiàng)和對(duì)應(yīng)的標(biāo)志。

添加子命令

因?yàn)樾」ぞ卟恢挂粋€(gè)功能,所以需要添加子命令,如:

cobra-cli add pf_m

代碼和 root.go 中的代碼相似,也是那幾步,

package cmd
import (
	"github.com/pfinal/pf_tools/pak"
	"github.com/spf13/cobra"
)
// pfMCmd represents the pfM command
var pfMCmd = &cobra.Command{
	Use:   "pf_m",
	Short: "pfm",
	Long:  `查詢(xún)對(duì)應(yīng)手機(jī)的歸屬地`,
	Run: func(cmd *cobra.Command, args []string) {
		if len(args) == 0 {
			_ = cmd.Help()
			return
		}
		if pak.CheckMobile(args[0]) == false {
			_ = cmd.Help()
			return
		}
		m := pak.Mobile{}
		m.GetInfo(args[0])
	},
}
func init() {
	rootCmd.AddCommand(pfMCmd)
}

沒(méi)啥特殊的, 就是添加一個(gè)命令, 然后初始化一下,然后實(shí)現(xiàn)功能.

Termui 庫(kù)

為了能夠在終端顯示的好看, 就使用了 termui 的庫(kù), termui是構(gòu)建在termbox-go之上的一個(gè)跨平臺(tái)的完全可自定義的終端dashboard 以及widget 庫(kù)

安裝

因?yàn)槭褂昧?go mod 來(lái)管理,所以這里就不用 go get 了,直接使用 go mod 即可.

代碼中導(dǎo)入:

 ui "github.com/gizak/termui/v3"
	"github.com/gizak/termui/v3/widgets"

然后 go mod tidy 然后mod 自己下載去吧

布局

前面天氣查詢(xún)的 使用了 Table 小組件, 代碼如下:

defer ui.Close()
	table := widgets.NewTable()
	table.Title = res.City + "天氣"
	table.BorderStyle = ui.NewStyle(ui.ColorRed)
	table.Rows = [][]string{
		[]string{"日期", "天氣", "風(fēng)向", "體感溫度"},
	}
	for _, v := range res.Weather {
		table.Rows = append(table.Rows, []string{v.Date, v.Weather, v.Wind, v.Temp})
	}
	table.TextStyle = ui.NewStyle(ui.ColorGreen)
	table.TitleStyle = ui.NewStyle(ui.ColorGreen)
	table.SetRect(0, 0, 60, 10)
	ui.Render(table)
	uiEvents := ui.PollEvents()
	for {
		e := <-uiEvents
		switch e.ID {
		case "q", "<C-c>":
			return
		case "c":
		}
	}

手機(jī)查詢(xún)的使用了 List 小組件,代碼如下:

 defer ui.Close()
	l := widgets.NewList()
	l.Title = "號(hào)碼詳細(xì)信息"
	l.Rows = []string{
		"[0] 查詢(xún)的號(hào)碼:" + pr.PhoneNum,
		"[1] 號(hào)碼運(yùn)營(yíng)商:" + pr.CardType,
		"[2] 號(hào)碼所在省份:" + pr.Province,
		"[3] 號(hào)碼所在城市:" + pr.City,
		"[4] 所在城市郵編:" + pr.ZipCode,
		"[5] 所在地區(qū)編碼:" + pr.AreaZone,
	}
	l.TextStyle = ui.NewStyle(ui.ColorGreen)
	l.TitleStyle = ui.NewStyle(ui.ColorGreen)
	l.WrapText = false
	l.SetRect(0, 0, 40, 8)
	ui.Render(l)
	previousKey := ""
	uiEvents := ui.PollEvents()

結(jié)構(gòu)沒(méi)有大的變化, Termui 官方的 github 倉(cāng)庫(kù)中有例子, 但是 官方的例子中,有些 屬性沒(méi)有使用, 比如 table.Titlel.TitleStyle 這種,需要自己嘗試去寫(xiě)

代碼地址

https://github.com/GoFinalPack/pf_tools 

最后愉快的玩耍吧

以上就是GO語(yǔ)言開(kāi)發(fā)終端命令行小工具輕松上手的詳細(xì)內(nèi)容,更多關(guān)于GO開(kāi)發(fā)終端命令行小工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文帶你了解Go中的內(nèi)存對(duì)齊

    一文帶你了解Go中的內(nèi)存對(duì)齊

    一旦涉及到較為底層的編程,特別是與硬件交互,內(nèi)存對(duì)齊是一個(gè)必修的課題,所以這篇文章小編就想來(lái)和大家聊一聊Go語(yǔ)言中的內(nèi)存對(duì)齊,希望對(duì)大家有所幫助
    2023-10-10
  • Go語(yǔ)言中的函數(shù)式編程實(shí)踐

    Go語(yǔ)言中的函數(shù)式編程實(shí)踐

    這篇文章主要介紹了Go語(yǔ)言中的函數(shù)式編程實(shí)踐,主要講解Go語(yǔ)言中的函數(shù)式編程概念和使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Go語(yǔ)言開(kāi)源庫(kù)實(shí)現(xiàn)Onvif協(xié)議客戶(hù)端設(shè)備搜索

    Go語(yǔ)言開(kāi)源庫(kù)實(shí)現(xiàn)Onvif協(xié)議客戶(hù)端設(shè)備搜索

    這篇文章主要為大家介紹了Go語(yǔ)言O(shè)nvif協(xié)議客戶(hù)端設(shè)備搜索示例實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • go 對(duì)象池化組件 bytebufferpool使用詳解

    go 對(duì)象池化組件 bytebufferpool使用詳解

    這篇文章主要為大家介紹了go 對(duì)象池化組件 bytebufferpool使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • golang使用go test輸出單元測(cè)試覆蓋率的方式

    golang使用go test輸出單元測(cè)試覆蓋率的方式

    單元測(cè)試覆蓋率是衡量代碼質(zhì)量的一個(gè)重要指標(biāo),重要的代碼文件覆蓋率應(yīng)該至少達(dá)到80%以上,Java 可以通過(guò)JaCoCo 統(tǒng)計(jì)覆蓋率,那么go 項(xiàng)目如何進(jìn)行代碼覆蓋率測(cè)試呢,本文將給大家詳細(xì)的介紹一下golang使用go test輸出單元測(cè)試覆蓋率的方式,需要的朋友可以參考下
    2024-02-02
  • Golang中文件目錄操作的實(shí)現(xiàn)步驟詳解

    Golang中文件目錄操作的實(shí)現(xiàn)步驟詳解

    在Golang中,文件目錄是指計(jì)算機(jī)文件系統(tǒng)中的文件夾或目錄。目錄是用于組織和存儲(chǔ)文件的一種方式,可以包含文件和其他子目錄,本文主要介紹了Golang中文件目錄操作的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-05-05
  • 使用Golang讀取toml配置文件的代碼實(shí)現(xiàn)

    使用Golang讀取toml配置文件的代碼實(shí)現(xiàn)

    在開(kāi)發(fā)過(guò)程中,配置文件是必不可少的一部分,它使我們能夠在不更改代碼的情況下更改應(yīng)用程序的行為,TOML是一種簡(jiǎn)單易讀的配置文件格式,本文將介紹如何使用Golang來(lái)讀取TOML配置文件,需要的朋友可以參考下
    2024-04-04
  • 詳解Go語(yǔ)言中Goroutine退出機(jī)制的原理及使用

    詳解Go語(yǔ)言中Goroutine退出機(jī)制的原理及使用

    goroutine是Go語(yǔ)言提供的語(yǔ)言級(jí)別的輕量級(jí)線(xiàn)程,在我們需要使用并發(fā)時(shí),我們只需要通過(guò)?go?關(guān)鍵字來(lái)開(kāi)啟?goroutine?即可。本文就來(lái)詳細(xì)講講Goroutine退出機(jī)制的原理及使用,感興趣的可以了解一下
    2022-07-07
  • golang模擬TCP粘包和拆包

    golang模擬TCP粘包和拆包

    粘包是指在發(fā)送多個(gè)小的數(shù)據(jù)包時(shí),接收端會(huì)將這些數(shù)據(jù)包合并成一個(gè)數(shù)據(jù)包接收,拆包是指發(fā)送的數(shù)據(jù)包在傳輸過(guò)程中被分割成多個(gè)小包,下面我們來(lái)看看go如何模擬TCP粘包和拆包吧
    2024-12-12
  • golang中net的tcp服務(wù)使用

    golang中net的tcp服務(wù)使用

    這篇文章主要介紹了golang中net的tcp服務(wù)使用,文章通過(guò)服務(wù)端監(jiān)聽(tīng)端口 展開(kāi)主題的詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的 小伙伴可以參考一下
    2022-04-04

最新評(píng)論

英德市| 宣化县| 巫溪县| 交口县| 渭南市| 定结县| 闸北区| 咸阳市| 镇赉县| 霞浦县| 凯里市| 高雄市| 德安县| 固原市| 读书| 松原市| 容城县| 甘孜县| 常州市| 玛曲县| 沙湾县| 洛川县| 彭泽县| 隆林| 高尔夫| 泌阳县| 繁昌县| 新巴尔虎左旗| 马龙县| 保定市| 清水河县| 罗山县| 平定县| 无棣县| 临江市| 瑞金市| 湘阴县| 乐亭县| 黄梅县| 阿克陶县| 政和县|