配置管理-常用方法 - 图1提示

以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档: https://pkg.go.dev/github.com/gogf/gf/v2/os/gcfg

GetWithEnv

  • 说明
    • GetWithEnv 方法会先从默认的配置文件中获取配置数据,获取为空的时候,将会去当前的环境变量中进行获取。需要注意的是名称命名转换规则:
    • 环境变量会将名称转换为大写,名称中的 . 字符转换为 _ 字符。
    • 参数名称中会将名称转换为小写,名称中的 _ 字符转换为 . 字符。
  • 格式:
  1. GetWithEnv(ctx context.Context, pattern string, def ...interface{}) (*gvar.Var, error)
  • 示例:
  1. func ExampleConfig_GetWithEnv() {
  2. var (
  3. key = `env.test`
  4. ctx = gctx.New()
  5. )
  6. v, err := g.Cfg().GetWithEnv(ctx, key)
  7. if err != nil {
  8. panic(err)
  9. }
  10. fmt.Printf("env:%s\n", v)
  11. if err = genv.Set(`ENV_TEST`, "gf"); err != nil {
  12. panic(err)
  13. }
  14. v, err = g.Cfg().GetWithEnv(ctx, key)
  15. if err != nil {
  16. panic(err)
  17. }
  18. fmt.Printf("env:%s", v)
  19. // Output:
  20. // env:
  21. // env:gf
  22. }

GetWithCmd

  • 说明: GetWithCmd 方法与 GetWithEnv 方法类似,也是先从默认的配置对象中获取配置数据,但是获取为空的时候,是去命令行中获取配置信息。
  • 格式:
  1. GetWithCmd(ctx context.Context, pattern string, def ...interface{}) (*gvar.Var, error)
  • 示例:
  1. func ExampleConfig_GetWithCmd() {
  2. var (
  3. key = `cmd.test`
  4. ctx = gctx.New()
  5. )
  6. v, err := g.Cfg().GetWithCmd(ctx, key)
  7. if err != nil {
  8. panic(err)
  9. }
  10. fmt.Printf("cmd:%s\n", v)
  11. // Re-Initialize custom command arguments.
  12. os.Args = append(os.Args, fmt.Sprintf(`--%s=yes`, key))
  13. gcmd.Init(os.Args...)
  14. // Retrieve the configuration and command option again.
  15. v, err = g.Cfg().GetWithCmd(ctx, key)
  16. if err != nil {
  17. panic(err)
  18. }
  19. fmt.Printf("cmd:%s", v)
  20. // Output:
  21. // cmd:
  22. // cmd:yes
  23. }

MustGetWithCmd

  • 说明: MustGetWithCmd 方法与 GetWithCmd 方法类似,该方法只会返回配置内容,一旦内部发生任何错误,将会有 panic。
  • 格式:
  1. MustGetWithCmd(ctx context.Context, pattern string, def ...interface{}) *gvar.Var
  • 示例:
  1. func ExampleConfig_MustGetWithCmd() {
  2. var (
  3. key = `cmd.test`
  4. ctx = gctx.New()
  5. )
  6. v := g.Cfg().MustGetWithCmd(ctx, key)
  7. fmt.Printf("cmd:%s\n", v)
  8. // Re-Initialize custom command arguments.
  9. os.Args = append(os.Args, fmt.Sprintf(`--%s=yes`, key))
  10. gcmd.Init(os.Args...)
  11. // Retrieve the configuration and command option again.
  12. v = g.Cfg().MustGetWithCmd(ctx, key)
  13. fmt.Printf("cmd:%s", v)
  14. // Output:
  15. // cmd:
  16. // cmd:yes
  17. }

MustGetWithEnv

  • 说明: MustGetWithEnv 方法与 GetWithEnv 方法类似,该方法只会返回配置内容,一旦内部发生任何错误,将会有 panic。
  • 格式:
  1. MustGetWithEnv(ctx context.Context, pattern string, def ...interface{}) *gvar.Var
  • 示例:
  1. func ExampleConfig_MustGetWithEnv() {
  2. var (
  3. key = `env.test`
  4. ctx = gctx.New()
  5. )
  6. v := g.Cfg().MustGetWithEnv(ctx, key)
  7. fmt.Printf("env:%s\n", v)
  8. if err := genv.Set(`ENV_TEST`, "gf"); err != nil {
  9. panic(err)
  10. }
  11. v = g.Cfg().MustGetWithEnv(ctx, key)
  12. fmt.Printf("env:%s", v)
  13. // Output:
  14. // env:
  15. // env:gf
  16. }

Data

  • 说明: Data 方法从配置对象中获取配置数据,组装成 map[string]interface{} 类型。
  • 格式:
  1. Data(ctx context.Context) (data map[string]interface{}, err error)
  • 示例:
  1. func ExampleConfig_Data() {
  2. ctx := gctx.New()
  3. content := `
  4. v1 = 1
  5. v2 = "true"
  6. v3 = "off"
  7. v4 = "1.23"
  8. array = [1,2,3]
  9. [redis]
  10. disk = "127.0.0.1:6379,0"
  11. cache = "127.0.0.1:6379,1"
  12. `
  13. c, err := gcfg.New()
  14. if err != nil{
  15. panic(err)
  16. }
  17. c.GetAdapter().(*gcfg.AdapterFile).SetContent(content)
  18. data, err := c.Data(ctx)
  19. if err != nil{
  20. panic(err)
  21. }
  22. fmt.Println(data)
  23. // Output:
  24. // map[array:[1 2 3] redis:map[cache:127.0.0.1:6379,1 disk:127.0.0.1:6379,0] v1:1 v2:true v3:off v4:1.23]
  25. }

MustData

  • 说明: MustData 方法从配置对象中获取配置数据,组装成 map[string]interface{} 类型。当该方法内部产生错误时不会返回错误,而是直接 panic。
  • 格式:
  1. MustData(ctx context.Context) map[string]interface{}
  • 示例:
  1. func ExampleConfig_MustData() {
  2. ctx := gctx.New()
  3. content := `
  4. v1 = 1
  5. v2 = "true"
  6. v3 = "off"
  7. v4 = "1.23"
  8. array = [1,2,3]
  9. [redis]
  10. disk = "127.0.0.1:6379,0"
  11. cache = "127.0.0.1:6379,1"
  12. `
  13. c, err := gcfg.New()
  14. if err != nil{
  15. panic(err)
  16. }
  17. c.GetAdapter().(*gcfg.AdapterFile).SetContent(content)
  18. data := c.MustData(ctx)
  19. fmt.Println(data)
  20. // Output:
  21. // map[array:[1 2 3] redis:map[cache:127.0.0.1:6379,1 disk:127.0.0.1:6379,0] v1:1 v2:true v3:off v4:1.23]
  22. }

Get

  • 说明: Get 方法从配置对象中获取配置数据,返回 gvar 泛型对象。
  • 格式:
  1. Get(ctx context.Context, pattern string, def ...interface{}) (*gvar.Var, error)
  • 示例:
  1. func ExampleConfig_Get() {
  2. ctx := gctx.New()
  3. content := `
  4. v1 = 1
  5. v2 = "true"
  6. v3 = "off"
  7. v4 = "1.23"
  8. array = [1,2,3]
  9. [redis]
  10. disk = "127.0.0.1:6379,0"
  11. cache = "127.0.0.1:6379,1"
  12. `
  13. c, err := gcfg.New()
  14. if err != nil{
  15. panic(err)
  16. }
  17. c.GetAdapter().(*gcfg.AdapterFile).SetContent(content)
  18. data,err := c.Get(ctx,"redis")
  19. if err != nil {
  20. panic(err)
  21. }
  22. fmt.Println(data)
  23. // Output:
  24. // {"cache":"127.0.0.1:6379,1","disk":"127.0.0.1:6379,0"}
  25. }

MustGet

  • 说明: MustGet 方法与 Get 类似,也是配置对象中获取配置数据,组装成 gvar 结构,但是返回参数只有一个: *gvar.Var
  • 注意:当配置文件不存在或者是其他 error 的情况下,会直接 panic,需要做好异常捕获措施。
  • 格式:
  1. MustGet(ctx context.Context, pattern string, def ...interface{}) *gvar.Var
  • 示例:
  1. func ExampleConfig_MustGet() {
  2. ctx := gctx.New()
  3. content := `
  4. v1 = 1
  5. v2 = "true"
  6. v3 = "off"
  7. v4 = "1.23"
  8. array = [1,2,3]
  9. [redis]
  10. disk = "127.0.0.1:6379,0"
  11. cache = "127.0.0.1:6379,1"
  12. `
  13. c, err := gcfg.New()
  14. if err != nil{
  15. panic(err)
  16. }
  17. c.GetAdapter().(*gcfg.AdapterFile).SetContent(content)
  18. data := c.MustGet(ctx,"redis")
  19. fmt.Println(data)
  20. // Output:
  21. // {"cache":"127.0.0.1:6379,1","disk":"127.0.0.1:6379,0"}
  22. }

GetAdapter

  • 说明: GetAdapter 方法是获取当前运行的 gcfg 适配器信息,关于适配器相关,可以请点击 配置管理-接口化设计
  • 格式:
  1. GetAdapter() Adapter
  • 示例:
  1. func ExampleConfig_GetAdapter() {
  2. c, err := gcfg.New()
  3. if err != nil{
  4. panic(err)
  5. }
  6. adapter := c.GetAdapter()
  7. fmt.Println(adapter)
  8. // Output:
  9. // &{config.toml 0xc00014d720 0xc000371880 false}
  10. }

SetAdapter

  • 说明: SetAdapter 方法是设置当前运行的 gcfg 适配器信息,关于适配器相关,可以请点击 配置管理-接口化设计
  • 格式:
  1. SetAdapter(adapter Adapter)
  • 示例:
  1. func ExampleConfig_SetAdapter() {
  2. c, err := gcfg.New()
  3. if err != nil{
  4. panic(err)
  5. }
  6. adapter := c.GetAdapter()
  7. c.SetAdapter(adapter)
  8. fmt.Println(adapter)
  9. // Output:
  10. // &{config.toml 0xc00014d720 0xc000371880 false}
  11. }