Golang命令行界面生成工具推荐

Golang命令行界面生成工具推荐 刚刚发布了 Gofire,这是一个为 Go 语言设计的工具,它能自动为你的函数生成命令行界面(CLI),并处理所有必需的中间连接工作。其灵感来源于 GitHub - google/python-fire: Python Fire 是一个库,可以从任何 Python 对象自动生成命令行界面(CLI)。

GitHub - 1pkg/gofire: Gofire 🔥 Command Line Interface Generator tool for Go

  • Gofire 使用代码生成技术,为你的代码生成简单且可预测的定制化 CLI。它会处理所有必需的底层工作,包括参数解析、类型转换、设置入口点、文档等。
  • Gofire 提供了多个具有不同功能和特性的 CLI 后端,包括:flag、cobra、bubbletea。
  • Gofire 对默认设置有明确的倾向,始终致力于提供简单且安全的 CLI。然而,如果需要,它也支持可选的 Go 结构体标签字面量,以灵活配置 CLI 参数。

更多关于Golang命令行界面生成工具推荐的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang命令行界面生成工具推荐的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Gofire 是一个优秀的 Go 语言 CLI 生成工具,它通过代码生成技术简化了命令行应用的开发。以下是一个使用 Gofire 生成 CLI 的示例:

首先,安装 Gofire:

go install github.com/1pkg/gofire@latest

假设我们有一个处理用户信息的函数:

// cmd/user.go
package main

import "fmt"

type User struct {
    Name string
    Age  int
}

func AddUser(name string, age int, active bool) {
    fmt.Printf("添加用户: 姓名=%s, 年龄=%d, 活跃=%v\n", name, age, active)
}

func GetUser(id int, details bool) {
    fmt.Printf("获取用户: ID=%d, 详情=%v\n", id, details)
}

使用 Gofire 生成 CLI 入口点:

gofire -pkg ./cmd -o cli/main.go

这会生成一个 CLI 程序,可以直接使用:

go run cli/main.go add-user --name "张三" --age 25 --active true
go run cli/main.go get-user --id 1001 --details true

Gofire 支持结构体标签进行参数配置:

type Config struct {
    Port    int    `gofire:"short=p, default=8080, desc=服务端口"`
    Host    string `gofire:"short=h, default=localhost, desc=主机地址"`
    Debug   bool   `gofire:"desc=调试模式"`
}

func StartServer(cfg Config) {
    fmt.Printf("启动服务: %s:%d (调试=%v)\n", cfg.Host, cfg.Port, cfg.Debug)
}

生成的 CLI 支持:

go run cli/main.go start-server -p 9090 -h 0.0.0.0 --debug

对于需要交互式 CLI 的场景,可以使用 bubbletea 后端:

gofire -pkg ./cmd -backend bubbletea -o cli/main.go

Gofire 生成的代码包含完整的参数解析、类型转换和帮助文档:

// 生成的代码示例
var addUserCmd = &cobra.Command{
    Use:   "add-user",
    Short: "添加用户",
    Run: func(cmd *cobra.Command, args []string) {
        name, _ := cmd.Flags().GetString("name")
        age, _ := cmd.Flags().GetInt("age")
        active, _ := cmd.Flags().GetBool("active")
        AddUser(name, age, active)
    },
}

Gofire 还支持子命令和复杂类型:

func ProcessData(
    input []string,      // 支持切片参数
    timeout time.Duration, // 自动转换时间格式
    ratio float64,       // 浮点数支持
) {
    fmt.Printf("处理数据: %v, 超时=%v, 比例=%f\n", input, timeout, ratio)
}

使用示例:

go run cli/main.go process-data --input item1 --input item2 --timeout 30s --ratio 0.85

Gofire 通过静态代码生成确保类型安全,避免了运行时反射的开销,生成的 CLI 性能与手动编写的相当。

回到顶部