当文件位于文件夹内时,无法添加新的 cobra CLI 命令



我正在使用cobra构建CLI
我想创建一个名为config的新命令,该命令将位于文件config.go和文件夹proxy中。

这就是结构:

MyProject
├── cmd
|  ├── proxy
|  |    └── config.go
|  └── root.go
└── main.go  

我用cobra:创建了命令

cobra add config  

它在cmd下创建了文件,我将文件移动到proxy文件夹下(如上面的结构中所示(。

问题是没有添加该命令
这是config.go代码:

// config.go
package cmd
import (
"fmt"
"github.com/spf13/cobra"
"MyProject/cmd"
)
var configCmd = &cobra.Command{
Use:   "config",
Short: "A brief description.",
Long: `A longer description.`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("config called")
},
}
func init() {
cmd.RootCmd.AddCommand(configCmd)
}

它构建成功,但在运行MyProj.exe -h时没有看到命令
我是不是做错了什么?

该包未包含在构建中,因此该命令从不初始化。

Go生成包。当您构建cmd包时,将编译该包中的所有go文件,并调用所有init()函数。但是,如果没有引用proxy包,则不会对其进行编译。

您的代理程序包中有package cmd,因此该程序包是代理目录下的cmd程序包。您应该将其重命名为proxy包。

然后,将其包含在构建中。在main.go:中

import {
_ "github.com/MyProject/cmd/proxy"
}

这将导致该包的init()运行,并将其自身添加到命令中。

相关内容

  • 没有找到相关文章

最新更新