E23*_*235 4 command go go-cobra
我正在使用 cobra 来构建 CLI。
\n我想创建一个名为 的新命令,config
该命令将位于该文件config.go
和文件夹内的文件中proxy
。
这是结构:
\n\nMyProject\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\ncobra add config \n
Run Code Online (Sandbox Code Playgroud)\n\n它在下面创建了文件cmd
,我将文件移动到该文件夹下proxy
(如上面的结构所示)。
问题是未添加该命令。
\n这是config.go
代码:
// 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我做错了什么吗?
该包不包含在构建中,因此该命令永远不会初始化。
Go 构建包。当您构建cmd
包时,该包中的所有 go 文件都将被编译,并且所有函数init()
将被调用。但如果没有任何内容引用该proxy
包,则不会编译该包。
你的 proxy 包package cmd
里面有,所以这个包是cmd
proxy 目录下的包。您应该将其重命名为proxy
package.json。
然后,将其包含在构建中。在 main.go 中:
import {
_ "github.com/MyProject/cmd/proxy"
}
Run Code Online (Sandbox Code Playgroud)
这将导致init()
该包运行,并将其自身添加到命令中。