我正在使用眼镜蛇构建CLI。我想创建一个名为config
的新命令,该命令将位于文件config.go
和文件夹proxy
中。
这是结构:
MyProject
├── cmd
| ├── proxy
| | └── config.go
| └── root.go
└── main.go
我用眼镜蛇创建了命令:
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
时看不到命令。我做错什么了吗?
该软件包未包含在构建中,因此该命令永远不会初始化。
开始构建软件包。生成cmd
程序包时,将编译该程序包中的所有go文件,并调用所有init()
函数。但是,如果没有引用proxy
包的内容,则不会进行编译。
您的代理软件包中有package cmd
,因此该软件包是代理目录下的cmd
软件包。您应该将其重命名为proxy
包。
然后,将其包含在构建中。在main.go中:
import {
_ "github.com/MyProject/cmd/proxy"
}
这将使该程序包的init()
运行,并将其自身添加到命令中。