Функция flag.Parsed

Функция flag.Parsed проверяет, была ли уже выполнена обработка флагов командной строки с помощью flag.Parse. Она возвращает true, если обработка флагов уже произошла, и false, если flag.Parse еще не вызывалась. Функция не принимает никаких параметров и часто используется для проверки состояния парсинга перед доступом к значениям флагов.

Синтаксис

goflag.Parsed()

Пример 1. Проверка состояния парсинга

Давайте проверим, что возвращает flag.Parsed до и после вызова flag.Parse:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  // До вызова Parse
  fmt.Println("Before Parse:", flag.Parsed())

  // Определяем флаг
  name := flag.String("name", "default", "user name")
  flag.Parse()

  // После вызова Parse
  fmt.Println("After Parse:", flag.Parsed())
  fmt.Println("Name:", *name)
}

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

go"Before Parse: false"
"After Parse: true"
"Name: default"

Пример 2. Условное выполнение кода

Часто flag.Parsed используется для условного выполнения кода в зависимости от того, были ли обработаны флаги. Например, можно парсить флаги только если они еще не были обработаны:

gopackage main

import (
  "flag"
  "fmt"
)

func main() {
  port := flag.Int("port", 8080, "server port")
  host := flag.String("host", "localhost", "server host")

  // Проверяем, были ли уже обработаны флаги
  if !flag.Parsed() {
    fmt.Println("Parsing flags...")
    flag.Parse()
  }

  fmt.Printf("Server running on %s:%d\n", *host, *port)
  fmt.Println("Flags parsed:", flag.Parsed())
}

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

go"Parsing flags..."
"Server running on localhost:8080"
"Flags parsed: true"

Пример 3. Проверка в комбинированных сценариях

Функция flag.Parsed полезна при работе с несколькими наборами флагов или при отложенном парсинге. Давайте создадим программу, которая проверяет статус парсинга в разных частях кода:

gopackage main

import (
  "flag"
  "fmt"
)

func checkParsed() {
  fmt.Printf("Parsed status in function: %t\n", flag.Parsed())
}

func main() {
  checkParsed()

  flag.Bool("verbose", false, "enable verbose output")
  fmt.Printf("Before parsing: %t\n", flag.Parsed())

  flag.Parse()
  fmt.Printf("After parsing: %t\n", flag.Parsed())

  checkParsed()
}

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

go"Parsed status in function: false"
"Before parsing: false"
"After parsing: true"
"Parsed status in function: true"

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

  • функцию flag.Parse,
    которая выполняет непосредственный разбор флагов командной строки
  • функцию flag.NFlag,
    которая возвращает количество обработанных флагов
  • функцию flag.NArg,
    которая возвращает количество аргументов после флагов
  • функцию flag.Arg,
    которая возвращает аргумент по указанному индексу