gpt4 book ai didi

go - 当文件位于文件夹中时无法添加新的 cobra CLI 命令

转载 作者:行者123 更新时间:2023-12-01 22:14:57 25 4
gpt4 key购买 nike

我正在使用 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,所以那个包就是proxy目录下的一个cmd包。您应该将其重命名为 proxy 包。

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

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

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

关于go - 当文件位于文件夹中时无法添加新的 cobra CLI 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61011873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com