// getCommands getCommands()[] {cli.Command FUNC :コマンド = cli.Command { 名: " ウェブ" 、 用法: " 実行Webサーバ" 、 アクション:runWeb、 フラグ:[] cli.Flag { cli.StringFlag { 名称: " ホスト" 、 値:" 0.0.0.0 " 、 用法:" バインドホスト" 、 }、 cli.IntFlag { 名: " ポート、P " 、 バリュー:DefaultPort、 使用法:" バインドポート" 、 }、 cli.StringFlag { 名: " ENV、E " 、 バリュー:" PROD " 、 用法:" ランタイム環境、DEV |テスト| PROD " 、 }、 }、 } 戻り[] cli.Command {コマンド} }
これら上記のコードは非常に簡単に理解することです、我々は大局的にそれを分割する必要が
ブレースの列が縦に、代入内部のメンバーは、カンマを追加した後ならば、我々は直接、クラスをインスタンス化するとき
B:= Taoshihan { 名:" taoshihan " 、 } FMT .Println(b.Name)
インターフェース部材メソッド内部インターフェイスを定義します
タイプフラグインタフェース{ 関連項目GetName()文字列 }
この方法を有することが起こる別のタイプを定義し、その後、あなたはこのタイプがインタフェースを実装することを考えることができます
入力StringFlag構造体{ } FUNC(T StringFlag)関連項目GetName()文字列{ リターン" taoshihan " }
あなたは変数の型を定義する場合の旗この時、StringFlagも過去に割り当てられます
VARフラグ A = StringFlag {} a.GetName()
そして、バックのコードのオリジナルロジックに、これは仕方を理解することは非常に簡単である場合には、次のを使用して
VaRのmyflag []フラグ myflag = アペンド(myflag、StringFlag {}、StringFlag {}) コマンド: = コマンド{ フラグ:myflag、 }
完全なソースコード:
メインパッケージ インポート" FMT " タイプフラグインターフェース{ 関連項目GetName()文字列 } コマンド構造体を入力{ フラグ[]フラグ } 入力StringFlag構造体{ } FUNC(T StringFlag)関連項目GetName()文字列{ リターン" taoshihan " } 入力Taoshihan構造体{ 名ストリング } メインFUNC(){ // VARフラグ // A = StringFlag {} // a.GetName() // B:= taoshihan { // 名前: "taoshihan"、 // } // fmt.Println(b.Name) VaRのmyflag []フラグ myflag = アペンド(myflag、StringFlag {}、StringFlag {}) コマンド: = コマンド{ フラグ:myflag、 } のため _、P:= rangeコマンド.Flags { FMT .Println(p.GetName()) } }