ホームページ  >  記事  >  バックエンド開発  >  Golang フラグとは何ですか

Golang フラグとは何ですか

(*-*)浩
(*-*)浩オリジナル
2019-12-03 10:09:592913ブラウズ

Golang フラグとは何ですか

Golang プログラムでコマンド ライン パラメーターを処理するには、さまざまな方法があります。単純なケースでは、ライブラリを使用せずに os.Args を直接処理できます。実際、Golang の標準ライブラリには、コマンド ライン パラメータを処理するためのフラグ パッケージが用意されています。コマンド ライン パラメータを処理するためのサードパーティ ライブラリ (Pflag など) もあります。

flag パッケージは、コマンド ライン パラメーターを解析するための一連の関数インターフェイスを提供します (推奨学習: go)

コマンド行構文

コマンド ライン構文は主に次の形式です

-flag //只支持bool类型
-flag=x
-flag x //只支持非bool类型

上記の構文は 1 つまたは 2 つの '-' 記号に対して同じ効果があります。ただし、 3 番目のケースでは、非 bool 型のみがサポートされることに注意してください。その理由は、次の状況が発生した場合に

cmd -x *

* が 0 になるためです。False はファイル名またはファイルを表す場合があります。はxタグの値を表しますが、0またはfalseの場合はあいまいさが生じるため、3番目の型は非bool型のみをサポートすることと規定されています。整数フラグの場合、有効な値は 1234、0664、0x1234、または負の数値などです。ブール フラグの場合は、1、0、t、f、T、F、true、false、TRUE、FALSE、True、False などになります。

コマンド ライン パラメータの解析方法

flag の使用には主に次の手順が含まれます

フラグ パラメータを定義するには 3 つの方法があります

flag.String( )、Bool ()、Int()、およびその他の flag.Xxx() メソッドの場合、このメソッドは対応するポインターを返します

import "flag"
var ip = flag.Int("flagname", 1234, "help message for flagname")

flag.XxxVar() メソッドを通じてフラグを変数にバインドすると、このメソッドは

var flagvar int
func init() {
    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}

などの value type は、 flag.Var() を通じてカスタム タイプをバインドします。また、カスタム タイプは、

flag.Var(&flagVal, "name", "help message for flagname")

などの Value インターフェイス (受信はポインターである必要があります) を実装する必要があります。このタイプのフラグの場合、デフォルト値は変数タイプの初期値です。

flag.Parse() を呼び出して、定義されたフラグに対するコマンド ライン パラメータを解析します。

flag.Parse()

解析関数は、最初の非フラグ コマンド ラインに遭遇しました。パラメータが指定されたら停止します。非フラグ コマンド ライン パラメータとは、コマンド ライン構文を満たさないパラメータを指します。たとえば、コマンド ライン パラメータは cmd --flag=true abc です。最初の非フラグ コマンド ライン パラメーターは "abc" です。

Parse を呼び出して解析した後、フラグ自体 (ポインター型) またはバインドされた変数 (値型) を直接使用できます

fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)

flag.Args()、flag.Arg(i) フラグ コマンド ライン パラメーターを介して非標準フラグを取得することもできます

以上がGolang フラグとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。