当文件位于文件夹中时无法添加新的 cobra CLI 命令
Can't add new cobra CLI command when the file is inside a folder
我正在使用 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
package.
然后,将其包含在构建中。在 main.go:
import {
_ "github.com/MyProject/cmd/proxy"
}
这将导致该包的 init()
变为 运行,并且它会将自己添加到命令中。
我正在使用 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
package.
然后,将其包含在构建中。在 main.go:
import {
_ "github.com/MyProject/cmd/proxy"
}
这将导致该包的 init()
变为 运行,并且它会将自己添加到命令中。