Skip to content

命令行

Go 语言有许多流行的库可以用来创建命令行接口 (CLI) 应用。以下是一些常见的 Go CLI 库和工具,适合不同类型的 CLI 需求:

1. Cobra

Cobra 是 Go 语言中最常用的 CLI 库,功能强大,支持命令行标志、子命令等,广泛应用于 Kubernetes 等项目。

安装

bash
go get -u github.com/spf13/cobra@latest

示例

go
package main

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

func main() {
    var rootCmd = &cobra.Command{
        Use:   "myapp",
        Short: "MyApp is a simple CLI application",
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("Hello from my CLI!")
        },
    }

    rootCmd.Execute()
}

2. urfave/cli

urfave/cli 是另一个流行的 Go CLI 库,适合快速构建命令行应用,支持子命令、标志、上下文等。

安装

bash
go get github.com/urfave/cli/v2

示例

go
package main

import (
    "fmt"
    "os"
    "github.com/urfave/cli/v2"
)

func main() {
    app := &cli.App{
        Name:  "myapp",
        Usage: "A simple CLI app",
        Action: func(c *cli.Context) error {
            fmt.Println("Hello from myapp!")
            return nil
        },
    }

    err := app.Run(os.Args)
    if err != nil {
        fmt.Println(err)
    }
}

3. Kingpin

Kingpin 是另一个 Go 的 CLI 库,提供一个更为结构化和强大的 API,适合需要多命令、大型应用的场景。

安装

bash
go get github.com/alecthomas/kingpin

示例

go
package main

import (
    "fmt"
    "os"
    "github.com/alecthomas/kingpin"
)

func main() {
    app := kingpin.New("myapp", "A simple CLI app")
    cmd := app.Command("greet", "Greet the user")

    app.Version("0.0.1")
    app.HelpFlag.Short('h')

    cmd.Parse(os.Args[1:])
    fmt.Println("Hello from Kingpin CLI!")
}

4. cli/flags

cli/flags 是一个轻量级的库,支持命令行参数解析,适合用于简单的命令行工具。

安装

bash
go get github.com/jessevdk/go-flags

示例

go
package main

import (
    "fmt"
    "github.com/jessevdk/go-flags"
)

type Options struct {
    Name string `short:"n" long:"name" description:"Name of the user" required:"true"`
}

func main() {
    var opts Options
    parser := flags.NewParser(&opts, flags.Default)
    _, err := parser.Parse()
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("Hello, %s!\n", opts.Name)
}

5. GoDoc & Documentation

在开发 CLI 时,Go 官方的 go doc 工具和文档能帮助你了解更详细的标准库支持和工具。例如,flag 包就能用来快速解析简单的命令行参数。

示例flag 包):

go
package main

import (
    "flag"
    "fmt"
)

func main() {
    name := flag.String("name", "World", "a name to greet")
    flag.Parse()
    fmt.Printf("Hello, %s!\n", *name)
}

结论

  • 如果需要创建一个大型的、复杂的 CLI 工具,Cobra 是一个非常好的选择。
  • 如果需要更简洁、灵活的工具,urfave/clikingpin 也非常适合。
  • 对于简单的命令行参数解析,flaggo-flags 都是不错的选择。

这些库都有很好的文档支持,你可以根据项目需求选择合适的库。