# #go #command-line-arguments
Вопрос:
Я создаю инструмент запроса API с помощью go и хочу использовать пакет «флаг».
Я определил флаг с помощью flag.String
, но когда я ввожу флаг, которого не существует
, программа выводит «флаг предоставлен, но не определен: {флаг}» (где {флаг} — это флаг, которого не существует.)
Мой код таков:
package main
import "fmt"
import "flag"
import "os"
func main() {
// Set up command-line arguments
apiRequestTool := flag.String("api", "", "")
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: TestTestTestn")
os.Exit(1)
}
flag.Parse()
// Check API URL value
if *apiRequestTool == "" {
fmt.Println(""api" Usage: --api [string]")
os.Exit(1)
}
}
Ответ №1:
Функции, такие как flag.String
и flag.Parse
работают с экспортированным *flag.FlagSet
одноэлементным именем flag.CommandLine
. Один из способов подавления всех сообщений об ошибках из этого набора флагов состоит в перенаправлении его вывода в черную дыру (например, в верхней части вашей основной функции), как это:
flag.CommandLine.SetOutput(io.Discard)
После этого сообщение об ошибке, которое вы считаете раздражающим, не будет напечатано:
$ go run main.go --whatever
Usage: TestTestTest
exit status 1