首页 > 解决方案 > 如何从 Go 中的子命令打印所有命令?

问题描述

我想在 Golang 中创建一个打印所有父命令的子命令。例子:

$ cli-tool list
Commands available:
- h, help for more info
- version for current version of tool
- list to list all commands

当前代码:

package main

import (
    "fmt"
    "os"
    "flag"
)

func main() {
    version := flag.NewFlagSet("version", flag.ExitOnError)
    list := flag.NewFlagSet("list", flag.ExitOnError)

    switch os.Args[1] {
    case "version":
        version.Parse(os.Args[2:])
    case "list":
        list.Parse(os.Args[2:])
    }

    if version.Parsed() {
        fmt.Println("5e")
        os.Exit(1)
    }
    if list.Parsed() {
        flag.PrintDefaults()
        os.Exit(1)
    }
}

结果:

$cli-tool list
$

(没有命令打印。)

我认为这是从“列表”命令中提取的,而不是所有基本命令。我希望它打印“版本”和“列表”,但它不打印任何东西。有没有办法可以调整它以使“PrintDefaults”始终引用父命令?

提前致谢!

标签: go

解决方案


推荐阅读