# Guide

In this guide we will walk through the various parts of cmdr. We will cover:

  • The basic layout of a cmdr application
  • Adding flags to your app
  • Define actions that get run
  • Create SubCommands for additional functionality
  • Define a custom banner
  • 使用环境变量
  • 使用外部配置文件
  • Uses the advanced features of cmdr, such as Toggleable Flags Group, ...
  • Using the Option Store to get the app's Options
  • 从 Option Store 中提取配置数据

Option Store 中的配置数据来自这些地方:

  • 通过 cmdr.NewBool, cmdr.NewString 等接口定义的命令行标志信息中提供的缺省值。例如:

    	cmdr.NewBool(false).
    		Titles("enable-ueh", "ueh").
    		EnvKeys("ENABLE_UEH").
    		Description("Enables the unhandled exception handler?").
    		AttachTo(root)
    
    1
    2
    3
    4
    5

    这里定义了一个 Bool 类型的标志(Flag),其默认值为 false,如果终端用户没有作出指定,则 Option Store 中会包含该条目且具有 bool 值 false。你可以通过 cmdr.GetBoolR('enable-ueh') 取得该值。

    标志总是带有默认值 false,一般较少会使用 true值。

    Toggleable Flags Group 例外,通常在组里会有一个 Flag 具有默认值 true。

  • 通过命令行参数指定的。例如:

    $ go run ./cli --enable-ueh
    
    1

    这里会通过命令行将 enable-ueh 的值设置为 true。

    此时,通过 cmdr.GetBoolR('enable-ueh') 取得的值将会为 true。

  • 通过环境变量指定的。例如:

    ENABLE_UEH=1 go run /cli
    
    1

    如果在定义 Flag 是没有通过 .EnvKeys() 指定环境变量名,cmdr 会试图查找自动化命名的环境变量名。例如此例中,自动化的环境变量名应该是 APP_ENABLE_UEH,请参考 cmdr.WithEnvPrefix() 的相关说明。

  • 通过配置文件装入的。例如在主配置文件中包含有如下条目:

    app: # 这是配置文件的前缀,可以通过 cmdr.WithOptionsPrefix() 自定义
      simple: # 这是通过 cmdr.Root(appName, version) 所指定的应用程序名
        enable-ueh: true   # 字段名称应该等于 Flag 的 Full 字段值
    
    
    1
    2
    3
    4
  • 通过 cmdr.Set(keyPath, value) 设置的。

# END

# 🔚