首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当文件位于文件夹中时,无法添加新的cobra命令

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

Stack Overflow用户
提问于 2020-04-03 12:24:03
回答 1查看 1.5K关注 0票数 2

我用眼镜蛇建造CLI。

我想要创建一个名为config的新命令,它将位于文件config.go中,文件位于文件夹proxy中。

这是一个结构:

代码语言:javascript
复制
MyProject
├── cmd
|  ├── proxy
|  |    └── config.go
|  └── root.go
└── main.go  

我用眼镜蛇创建了命令:

代码语言:javascript
复制
cobra add config  

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

问题是没有添加命令。

这是config.go代码:

代码语言:javascript
复制
// 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时看不到命令。

我做错什么了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-03 14:28:35

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

去构建包。构建cmd包时,将编译该包中的所有go文件,并调用所有init()函数。但是,如果没有引用proxy包的内容,就不会编译它。

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

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

代码语言:javascript
复制
import {
  _ "github.com/MyProject/cmd/proxy"
}

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61011873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档