golang Проблема разбора аргумента командной строки - PullRequest
0 голосов
/ 05 февраля 2020

Когда я запускаю ниже кода

package main

import (
    "flag"
    "fmt"
)

func main() {

    i := flag.Int("i", 0, "Any integer value")
    b := flag.Bool("b", false, "Any boolean value")
    s := flag.String("s", "Hello", "Any string value")

    flag.Parse()

    fmt.Println("-i", *i)
    fmt.Println("-b", *b)
    fmt.Println("-s", *s)
}
go run main.go -i 33 -b true -s hi

-i 33
-b true
-s Hello

go run main.go -i 33 -s hi

-i 33
-b false
-s hi

go run main.go -i 33 -s hi -b true

-i 33
-b true
-s hi

go run main.go -i 33 -b true -s hi

-i 33
-b true
-s Hello

Почему аргумент командной строки "-s" не работает, когда он прошел в конце

Заранее спасибо

1 Ответ

2 голосов
/ 05 февраля 2020

Это из-за логического флага -b. Логический флаг проверяет наличие флага, он не проверяет аргумент флага. То есть:

go run main.go -b 

выдаст -b true, а

go run main.go

выдаст -b false.

go run main.go -b false

выдаст -b true, потому что установлен флаг -b. false не является распознанным аргументом, поэтому он останавливает обработку там.

Если вы хотите использовать true / false, вы должны использовать этот формат:

go run main.go -i 33 -b=false -s hi

Это также должно работать (здесь -b is true):

go run main.go -i 33 -b -s hi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...