Функция flag.Set

Функция flag.Set устанавливает значение для указанного флага командной строки. В первый параметр мы передаем имя флага, во второй параметр - новое строковое значение, которое будет преобразовано в соответствующий тип. Функция возвращает ошибку, если флаг с таким именем не был определен или переданное значение не удалось преобразовать к нужному типу.

Синтаксис

goflag.Set(name, value string) error

Пример

Давайте определим строковый флаг и установим ему новое значение с помощью flag.Set:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  var name = flag.String("name", "default", "user name")
  flag.Parse()

  err := flag.Set("name", "john")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(*name)
}

Результат выполнения кода:

go"john"

Пример

Давайте посмотрим, как flag.Set работает с числовым флагом:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  var age = flag.Int("age", 18, "user age")
  flag.Parse()

  err := flag.Set("age", "25")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(*age)
}

Результат выполнения кода:

go"25"

Пример

Рассмотрим попытку установить неправильное значение для булевого флага:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  var enabled = flag.Bool("enabled", false, "enable feature")
  flag.Parse()

  err := flag.Set("enabled", "not-a-bool")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(*enabled)
}

Результат выполнения кода:

go"Error: invalid boolean value not-a-bool for flag enabled: parse error"

Пример

Попробуем установить значение для несуществующего флага:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  err := flag.Set("unknown", "value")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("Success")
}

Результат выполнения кода:

go"Error: no such flag -unknown"

Смотрите также

  • функцию flag.String,
    которая определяет флаг строкового типа
  • функцию flag.Int,
    которая определяет флаг целочисленного типа
  • функцию flag.Bool,
    которая определяет флаг булевого типа
  • функцию flag.Lookup,
    которая возвращает информацию о флаге по его имени