Установите порядок вывода с помощью flag.printdefaults ()

Я хочу сделать справочное сообщение моей программы более понятным, изменив вывод 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

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

Невозможно отменить. Порядок фиксированный.

Volker 31.10.2018 13:02
1
1
245
1

Ответы 1

Согласно исходный код флага, невозможно изменить порядок 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

Другие вопросы по теме