Go の人気により、ますます多くのプログラマーが Go を使用してプログラムを作成し始めています。重要な Go ライブラリの 1 つは Flags ライブラリです。 Flags ライブラリは、Go プログラムがコマンド ラインに入力されたパラメータを簡単に解析して使用できるようにするコマンド ライン パラメータ解析ライブラリです。ただし、すべてのプログラマが Flags ライブラリを使用してコマンド ライン パラメータを正しく解析できるわけではありません。 Go プログラムが Flags ライブラリを正しく使用していない場合は、その理由を知りたいかもしれません。
Flags ライブラリを使用するときによくある問題は、構文エラーです。プログラム作成時に必要なパラメータの追加を忘れたり、Flags ライブラリを使用する際に構文エラーが発生したりすると、プログラムは正しく動作しません。
プログラムが age と name という 2 つのパラメーターを受け取り、Flags ライブラリを通じてこれらのパラメーターを解析するとします。次の例では、無効なフラグ値を指定しています。
package main import ( "flag" "fmt" ) func main() { name := flag.String("name", "", "Your name") age := flag.Int("age", 0, "Your age") flag.Parse() fmt.Printf("Name: %s, Age: %d", *name, *age) }
次のようにフラグを読み取ろうとすると、go run main.go -age=30 -invalid
とプログラムは出力します。エラー:
flag provided but not defined: -invalid Usage of /tmp/go-build943904451/b001/exe/main: -age int Your age (default 0) -name string Your name exit status 2
Flag ライブラリにより、未定義のフラグを指定するよう求められたことがわかります。
発生する可能性のあるもう 1 つの問題は、タグが正しく解析されないことです。これは通常、プログラムが間違った形式のマークアップを解析しようとしたときに発生します。たとえば、プログラムがすべてのトークンが --
で始まると想定しているにもかかわらず、ユーザーが誤って -
または /
を使用した場合、プログラムはそれを正しく解析しません。 。 マーク。
次のサンプル プログラムは、go run main.go --name=John --age=30
が正しく入力されている場合は正しい結果を出力しますが、go run が入力されている場合は正しい結果が出力されます。 main.go -name=John -age=30
の場合、タグを正しく解析できません:
package main import ( "flag" "fmt" ) func main() { var name string var age int flag.StringVar(&name, "name", "", "Your name") flag.IntVar(&age, "age", 0, "Your age") flag.Parse() fmt.Printf("Name: %s, Age: %d ", name, age) }
間違ったタグを入力すると、次のエラーが表示されます:
flag provided but not defined: -n Usage of /tmp/go-build777882156/b001/exe/main: -age int Your age (default 0) -name string Your name exit status 2
注、 flag --name
の後の --
は --
に置き換える必要があるため、ライブラリはこのタグを正しく解析できません。
プログラムが Flags ライブラリを正しく使用できない理由は、上記の 2 つの側面にとどまらない場合があります。たとえば、プログラムでは、特定の環境や要件に合わせて、別の Flags ライブラリ バージョンを使用する必要がある場合があります。または、コード内に Flags ライブラリまたはコードの組み合わせによって生成された他の構成が含まれています。
このような問題を完全に否定することはできませんので、問題の原因を調べるために、プログラムが Flags ライブラリの使用要件をすべて満たしているか、最新バージョンを使用しているかなどを確認してください。
実際には、ドキュメントを確認し、サンプル プログラムを注意深く観察することで、Flags ライブラリをより深く理解し、Flags ライブラリを正しく使用する Go プログラムを作成できます。
以上が私の Go プログラムが Flags ライブラリを正しく使用しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。