Go で値のリストのカスタム フラグ タイプを定義するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-16 18:13:03
オリジナル
926 人が閲覧しました

How to Define a Custom Flag Type for a List of Values in Go?

Go でフラグに値のリストを取得する

Go では、フラグ パッケージはコマンドライン引数の解析をサポートしています。ただし、当初は限られた範囲のデータ型 (String、Int、Bool) のみを提供していました。より複雑なデータに対応するには、独自のフラグ タイプを定義し、flag.Var() を使用してそれをバインドできます。

リストのカスタム フラグ タイプ

フラグを検討する複数の値をリストとして受け入れます。まず、カスタム フラグ タイプを定義します:

type arrayFlags []string

// String is an implementation of the flag.Value interface
func (i *arrayFlags) String() string {
    return fmt.Sprintf("%v", *i)
}

// Set is an implementation of the flag.Value interface
func (i *arrayFlags) Set(value string) error {
    *i = append(*i, value)
    return nil
}
ログイン後にコピー

カスタム フラグの使用

次に、カスタム フラグとバインドするこのタイプの変数を宣言します:

var myFlags arrayFlags
ログイン後にコピー

カスタム フラグの登録

最後に、フラグ パッケージを使用してカスタム フラグを登録できます。

flag.Var(&myFlags, "list1", "Some description for this param.")
ログイン後にコピー

これで、次のように渡すことができます。プログラムの実行時にこのフラグに複数の値を設定します:

go run your_file.go --list1 value1 --list1 value2
ログイン後にコピー

更新されたコード スニペット

参考までに、完全なコード スニペットを次に示します:

package main

import (
    "flag"
    "fmt"
)

type arrayFlags []string

// String is an implementation of the flag.Value interface
func (i *arrayFlags) String() string {
    return fmt.Sprintf("%v", *i)
}

// Set is an implementation of the flag.Value interface
func (i *arrayFlags) Set(value string) error {
    *i = append(*i, value)
    return nil
}

var myFlags arrayFlags

func main() {
    flag.Var(&myFlags, "list1", "Some description for this param.")
    flag.Parse()
}
ログイン後にコピー

以上がGo で値のリストのカスタム フラグ タイプを定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート