golang: Как я могу использовать pflag с другими пакетами, которые используют флаг?

Как использовать pflag при использовании других пакетов, использующих флаг?

Некоторые из этих пакетов определяют флаги для пакета флага (например, в их функциях init) и требуют вызова flag.Parse ().

Для определения флагов с помощью пакета pflag требуется вызвать pflag.Parse ().

Один из вызовов flag.Parse () и pflag.Parse () завершится ошибкой, когда аргументы будут смешаны.

Как использовать pflag с другими пакетами, которые используют флаг?

3 ответа

Решение

Я получил ответ от сопровождающего для pflag.

Решение состоит в том, чтобы "импортировать" все флаги, определенные для flag, в pflag, а затем вызвать только pflag.Parse().

Для этого pflag предоставляет вспомогательную функцию AddGoFlagSet().

Я нашел два подхода к этому.

  1. Один с pflags AddGoFlags(). IE.

    f := pflag.NewFlagSet("goFlags", pflag.ExitOnError)
    f.AddGoFlagSet(flag.CommandLine)
    f.Parse([]string{
       "--v=10", // Your go flags that will be pass to other programs.
    })
    flag.Parse()
    
  2. Другой подход, который вы можете использовать. Это не по книге, но я видел, как некоторые использовали это... получить значение флага другим pflag.

    pflag.StringVar(&f, "f", "**", "***")
    pflag.Parse()
    

Установите значение в качестве значения флага.

    flag.Set("v", f)
    flag.Parse()

и ты хорош, чтобы пойти..

Как использовать pflag с другими пакетами, которые используют флаг?

Ты не можешь. Это или или. plfag - это замена флага, а не аддона.

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