cobra 使用

不多說,直接上代碼,這三個(gè)文件在 test 目錄下

目錄

----test
--------main.go
--------car.go
--------guyu.go

main

package command

import (
    "log"

    "github.com/spf13/cobra"
)

var Cmd = &cobra.Command{
    Use:     "test",
    Short:   "Run doc short server",
    Long:    `Run doc long server`,
    Version: "1.0.0",
    Example: "this is example",
    Run: func(cmd *cobra.Command, args []string) { // 程序默認(rèn)執(zhí)行的邏輯,./test 時(shí)執(zhí)行
        log.Println("out run args:", args)
        log.Println("out run urlAddress:", urlAddress)
        log.Println("out run worker:", worker)
        log.Println("out run port:", port)
    },
}

var (
    urlAddress string
    worker     int
    port       string
)

func init() {
    Cmd.Flags().StringVar(&urlAddress, "url", "http://127.0.0.1:8080/group1/upload", "url")
    Cmd.Flags().IntVar(&worker, "worker", 100, "num of worker")
    Cmd.Flags().StringVarP(&port, "port", "p", "8080", "port") // 使用 StringVarP 添加簡化參數(shù),-p
}

func CommandLoad() {
    // 增加自子命令,如果增加了子命令,Run中的 args 參數(shù)對應(yīng)就只能是子命令的,用來執(zhí)行子命令
    // 主命令中不能隨便添加,
    // example:當(dāng)沒有子命令時(shí),執(zhí)行 ./test aa,args 中會(huì)有 aa 參數(shù),當(dāng)加上子命令,這么執(zhí)行就會(huì)報(bào)錯(cuò),只能是對應(yīng)子命令的內(nèi)容,
    // 比如在這里就是只能是, ./test car aa, 在 car 的子命令中的 Run 的 args 中會(huì)獲取到 aa
    Cmd.AddCommand(carCmd, guyuCmd)
    Cmd.Execute()
}

car.go

package command

import (
    "log"

    "github.com/spf13/cobra"
)

var carCmd = &cobra.Command{
    Use:     "car", // 這個(gè)屬性內(nèi)容就是命令的一個(gè)參數(shù),比如這里: ./test car 加上 car就執(zhí)行這里的 Run 邏輯
    Short:   "Run car short server",
    Long:    `Run car long server`,
    Version: "1.0.1",
    Example: "this is car example",
    Run: func(cmd *cobra.Command, args []string) {
        log.Println("car running:", args)
    },
}

guyu.go

package command

import (
    "log"

    "github.com/spf13/cobra"
)

var guyuCmd = &cobra.Command{
    Use:     "guyu",
    Short:   "Run guyu short server",
    Long:    `Run guyu long server`,
    Version: "1.0.0",
    Example: "this is guyu example",
    Run: func(cmd *cobra.Command, args []string) {
        log.Println("guyu running:", args)
    },
}

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

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 Gradle是新一代構(gòu)建工具,從0.x版本一路走來雖然國內(nèi)可尋的資料多了一些,但都是比較碎片化的知識(shí)。官方的...
    三也視界閱讀 60,239評論 0 39
  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 13,900評論 2 59
  • 前幾天再做一個(gè)列表功能的時(shí)候,提需求的大大突然走過來對我說:這個(gè)功能不用調(diào)接口,也不用聯(lián)網(wǎng),自己保存在本地就行了。...
    妤亓子閱讀 1,050評論 0 2
  • Tcp/IP通信也是不安全的,在傳輸?shù)臅r(shí)候也可能出現(xiàn)漏洞 查看正在運(yùn)行的進(jìn)程 adb shell ps -A |g...
    遠(yuǎn)遠(yuǎn)飄著云閱讀 5,191評論 0 0
  • 轉(zhuǎn)載注明出處:http://www.itdecent.cn/p/5255b100930e 0. 前言 完全由個(gè)人翻...
    王三的貓阿德閱讀 2,730評論 0 4

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