当文件位于文件夹中时,无法添加新的眼镜蛇CLI命令

问题描述 投票:0回答:1

我正在使用眼镜蛇构建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时看不到命令​​。我做错什么了吗?

go command go-cobra
1个回答
0
投票

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

开始构建软件包。生成cmd程序包时,将编译该程序包中的所有go文件,并调用所有init()函数。但是,如果没有引用proxy包的内容,则不会进行编译。

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

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

import {
  _ "github.com/MyProject/cmd/proxy"
}

这将使该程序包的init()运行,并将其自身添加到命令中。

© www.soinside.com 2019 - 2024. All rights reserved.