首頁 > 後端開發 > Golang > 主體

您可以為 Cobra 中的標誌指定可選參數嗎?

王林
發布: 2024-02-13 08:40:08
轉載
859 人瀏覽過

您可以为 Cobra 中的标志指定可选参数吗?

php小編子墨回答:是的,您可以為Cobra中的標誌指定可選參數。 Cobra是一個強大的命令列工具,用於創建優雅的PHP應用程式。透過在Cobra指令的標誌後面加上方括號([]),您可以為標誌指定可選參數。這使得用戶可以根據需要選擇性地提供額外的資訊或配置選項。使用可選參數,可以增加程式的靈活性和適應性,為使用者提供更好的使用體驗。

問題內容

假設我的程式中有這個標誌,它只會列印正數:

c.PersistentFlags().IntVar(&SomeFlag, optionSomeFlag, 0, "做某事(範圍: x-y)")

預設值為 0,因此如果使用者不切換該標誌,則不會列印任何內容。 如何使標誌接受參數但本身有預設值? 即如果預設值為 5

./program --someflag 輸出將會是 5

#但如果我這樣做了

./program --someflag=1 輸出將為 1

#我嘗試遵循 Cobra 的使用者指南,並期望有一種命令類型,該命令類型允許我僅在使用者觸發該標誌時指定預設值,而不僅僅是完全指定預設值。我可能誤解了這一點或錯過了一些東西。

解決方法

可以使用nooptdefval來完成

rootcmd.persistentflags().lookup("someflag").nooptdefval = "5"
登入後複製

在下面的程式碼中,您可以找到具有您描述的行為的帶有 cobra 的命令列應用程式的完整範例

package main

import (
    "fmt"
    "github.com/spf13/cobra"
)

func main() {
    var someflag int
    var defaultsomeflag = "5"

    // create the root command.
    rootcmd := &cobra.command{
        use:   "program",
        short: "a brief description of your application",
        long:  "a longer description of your application",
        run: func(cmd *cobra.command, args []string) {
            // check whether the flag was explicitly set.
            if cmd.flags().lookup("someflag").changed {
                fmt.printf("someflag: %d\n", someflag)
            } else {
                // if the flag was not explicitly set don't print a value.
                fmt.printf("someflag is not set\n")
            }
        },
    }

    // define the flag and set its default value.
    rootcmd.persistentflags().intvar(&someflag, "someflag", 0, "do something (range: x-y)")
    rootcmd.persistentflags().lookup("someflag").nooptdefval = defaultsomeflag

    // execute the root command.
    if err := rootcmd.execute(); err != nil {
        fmt.println(err)
    }
}
登入後複製

下面是不同標誌值的執行結果。

$ ./test
someflag is not set
$ ./test --someflag
someflag: 5
$ ./test --someflag=3
someflag: 3
登入後複製

以上是您可以為 Cobra 中的標誌指定可選參數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板