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

E23*_*235 4 command go go-cobra

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

\n\n

这是结构:

\n\n
MyProject\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 cmd\n|  \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 proxy\n|  |    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 config.go\n|  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 root.go\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.go  \n
Run Code Online (Sandbox Code Playgroud)\n\n

我用 cobra 创建了命令:

\n\n
cobra add config  \n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

问题是未添加该命令。
\n这是config.go代码:

\n\n
// config.go\npackage cmd\n\nimport (\n    "fmt"\n    "github.com/spf13/cobra"\n    "MyProject/cmd"\n)\n\nvar configCmd = &cobra.Command{\n    Use:   "config",\n    Short: "A brief description.",\n    Long: `A longer description.`,\n    Run: func(cmd *cobra.Command, args []string) {\n        fmt.Println("config called")\n    },\n}\n\nfunc init() {\n    cmd.RootCmd.AddCommand(configCmd)\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

它构建成功,但运行时看不到该命令MyProj.exe -h
\n我做错了什么吗?

\n

Bur*_*dar 5

该包不包含在构建中,因此该命令永远不会初始化。

Go 构建包。当您构建cmd包时,该包中的所有 go 文件都将被编译,并且所有函数init()将被调用。但如果没有任何内容引用该proxy包,则不会编译该包。

你的 proxy 包package cmd里面有,所以这个包是cmdproxy 目录下的包。您应该将其重命名为proxypackage.json。

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

import {
  _ "github.com/MyProject/cmd/proxy"
}
Run Code Online (Sandbox Code Playgroud)

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