Не удается добавить новую команду CLI cobra, когда файл находится в папке - PullRequest
0 голосов
/ 03 апреля 2020

Я использую кобру для построения 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.
Я что-то не так делаю?

1 Ответ

1 голос
/ 03 апреля 2020

Пакет не включен в сборку, поэтому команда никогда не инициализируется.

Go создает пакеты. При сборке пакета cmd все файлы go в этом пакете будут скомпилированы, и будут вызваны все функции init(). Но если ничего не ссылается на пакет proxy, он не будет скомпилирован.

Ваш прокси-пакет содержит package cmd, поэтому этот пакет является cmd пакетом в каталоге прокси. Вы должны переименовать его в proxy package.

Затем включите его в сборку. В main. go:

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

Это приведет к запуску init() для этого пакета и добавит себя в команду.

...