Установите порядок вывода с помощью flag.PrintDefaults () - PullRequest
0 голосов
/ 31 октября 2018

Я хочу сделать сообщение справки моей программой более понятным, изменив вывод stdout. Теперь я использовал flag.Usage для предоставления дополнительной информации, но также хочу изменить порядок вывода флагов. Теперь флаги отсортированы по алфавиту, но мне нужно изменить порядок на логический. Например. Сейчас:

./mytool --help
-aaa
  input file of aaa
-bbb 
  input file of bbb
-mode 
  job's mode

желаю:)

./mytool --help
-mode 
  job's mode
-aaa
  input file of aaa
-bbb 
  input file of bbb

Большое спасибо!

1 Ответ

0 голосов
/ 31 октября 2018

Согласно исходному коду флага , невозможно изменить порядок flag.PrintDefault().

Однако вы можете написать пользовательскую функцию flag.Usage, как в следующем примере:

package main
import (
    "flag"
    "fmt"
)
func main() {
    flag.String("aaa", "foo", "input file of aaa")
    flag.String("bbb", "foo", "input file of aaa")
    flag.String("mode", "foo", "job's mode")

    flag.Usage = func() {
        flagSet := flag.CommandLine
        fmt.Printf("Custom Usage of %s:\n", "./mytool")
        order := []string{"mode", "aaa", "bbb"}
        for _, name := range order {
            flag := flagSet.Lookup(name)
            fmt.Printf("-%s\n", flag.Name)
            fmt.Printf("  %s\n", flag.Usage)
        }
    }
    flag.Parse()
}

Выход:

Custom Usage of ./mytool:
-mode
  job's mode
-aaa
  input file of aaa
-bbb
  input file of aaa
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...