Функция flag.String

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

Синтаксис

goflag.String(name, defaultValue, usage)

Пример с одним флагом

Давайте определим строковый флаг -name со значением по умолчанию "guest" и описанием "user name":

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  name := flag.String("name", "guest", "user name")
  flag.Parse()
  fmt.Println("Hello,", *name)
}

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

go"Hello, guest"

Результат выполнения с указанием флага -name=John:

go"Hello, John"

Пример с несколькими флагами

Определим два строковых флага -username и -role со значениями по умолчанию:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  username := flag.String("username", "admin", "user name")
  role := flag.String("role", "user", "user role")
  flag.Parse()
  fmt.Printf("Username: %s, Role: %s\n", *username, *role)
}

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

go"Username: john, Role: manager"

Проверка установки флага

Чтобы определить, был ли указан флаг, можно использовать функцию flag.Visit. Давайте проверим, был ли передан флаг -config:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  config := flag.String("config", "config.json", "config file path")
  flag.Parse()

  exists := false
  flag.Visit(func(f *flag.Flag) {
    if f.Name == "config" {
      exists = true
    }
  })
  fmt.Printf("config flag specified: %v\n", exists)
  fmt.Printf("config path: %s\n", *config)
}

Результат выполнения без флага:

go"config flag specified: false"
"config path: config.json"

Результат выполнения с флагом -config=custom.json:

go"config flag specified: true"
"config path: custom.json"

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

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