0Pricing
Go Academy · レッスン

フラグと永続フラグ

string、int、boolフラグとViperの連携

「フラグと永続フラグ」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

ローカルフラグ

ローカルフラグは、定義されたコマンドにのみ適用されます。cmd.Flags() を使用します:

var port int
serveCmd.Flags().IntVar(&port, "port", 8080, "HTTP server port")

永続フラグ

永続フラグは、そのコマンドとすべてのサブコマンドに継承されます。cmd.PersistentFlags() を使用します:

var verbose bool
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Enable verbose output")

短縮フラグ

1 文字の短縮名を追加するには、*VarP バリアントを使用します:

cmd.Flags().StringVarP(&output, "output", "o", "stdout", "Output destination")

フラグの型

Cobra は pflag を通じて、String、Bool、Int、Int64、Float64、StringSlice、Duration、Count などをサポートします。それぞれに Var バリアント(ポインターを受け取る)と、便利なバリアント(ポインターを返す)があります。

必須フラグ

フラグを必須にすると、指定されていない場合に Cobra がエラーを返します:

cmd.MarkFlagRequired("config")

フラググループ

MarkFlagsRequiredTogether と MarkFlagsMutuallyExclusive を使って、フラグを相互排他的、または同時に必須として指定します:

cmd.MarkFlagsRequiredTogether("user", "password")
cmd.MarkFlagsMutuallyExclusive("json", "yaml")

StringSlice フラグ

カンマ区切りのリスト、またはフラグの繰り返しによって複数の値を受け取ります:

var tags []string
cmd.Flags().StringSliceVar(&tags, "tags", nil, "Tags (comma-separated)")
// Usage: --tags a,b,c or --tags a --tags b

フラグと Viper のバインド

cobra のフラグを Viper のキーにバインドすると、値を環境変数や構成ファイルからも取得できます:

viper.BindPFlag("port", serveCmd.Flags().Lookup("port"))
viper.BindEnv("port", "APP_PORT")

デフォルト値の表示

Cobra はヘルプテキストにデフォルト値を自動的に表示します。一般的なケースですぐ使える、わかりやすいデフォルト値を指定してください。

フラグ値へのアクセス

バインドしたポインターを使ってフラグ値にアクセスするか、ポインターにアクセスできない場合はコマンドのフラグセットから名前で検索します:

port, _ := cmd.Flags().GetInt("port")

Changed メソッド

cmd.Flags().Changed("flag-name") は、ユーザーがフラグを明示的に設定した場合にのみ true を返します。「指定されなかった」場合と「デフォルト値で指定された」場合を区別するために使用します。

クイックチェック

Cobra におけるローカルフラグと永続フラグの違いは何ですか

振り返り: フラグと永続フラグ

要点:

  • cmd.Flags(): ローカル。cmd.PersistentFlags(): サブコマンドに継承されます
  • 短縮名には *VarP を使用し、必須フラグには MarkFlagRequired を使用します
  • フラグ間の関係には MarkFlagsRequiredTogether / MarkFlagsMutuallyExclusive を使用します
  • Changed() でユーザーがフラグを明示的に設定したかどうかを検出します

よくある質問

「フラグと永続フラグ」レッスンは無料ですか?

はい。「フラグと永続フラグ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「フラグと永続フラグ」で何を学びますか?

string、int、boolフラグとViperの連携 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「フラグと永続フラグ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Cobraの基本
  2. フラグと永続フラグ
  3. サブコマンドとコマンドグループ
  4. CLIツールの配布
← Go Academyに戻る