Функция flag.Duration

Функция flag.Duration определяет флаг командной строки с типом time.Duration. Она принимает три параметра: имя флага, значение по умолчанию и описание флага. Функция возвращает указатель на переменную типа time.Duration, в которую будет записано переданное значение. Длительность указывается в виде строки, например, "10s", "5m", "2h30m".

Синтаксис

goflag.Duration(name, value, usage)

Пример

Давайте определим флаг "timeout" со значением по умолчанию "10s":

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  timeout := flag.Duration("timeout", 10*time.Second, "timeout duration")
  flag.Parse()
  fmt.Println(*timeout)
}

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

go"10s"

Пример

Давайте передадим в программу значение флага "timeout" равное "5m30s":

gopackage main

import (
  "flag"
  "fmt"
  "time"
)

func main() {
  timeout := flag.Duration("timeout", 10*time.Second, "timeout duration")
  flag.Parse()
  fmt.Printf("Timeout: %v, seconds: %v", *timeout, timeout.Seconds())
}

Запустим программу с флагом:

go$ go run main.go -timeout=5m30s
"Timeout: 5m30s, seconds: 330"

Пример

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

gopackage main

import (
  "flag"
  "fmt"
  "time"
)

func main() {
  interval := flag.Duration("interval", 30*time.Second, "interval between checks")
  flag.Parse()

  if *interval < 5*time.Second {
    fmt.Println("Warning: interval is too short")
  } else {
    fmt.Printf("Interval set to %v\n", *interval)
  }
}

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

go$ go run main.go -interval=3s
"Warning: interval is too short"

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

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