WHCSRL 技术网

关于golang的toml配置文件理解

        一般的程序开发离不开数据库,以及调用各式各样的第三方接口等步骤。比如说开发用到的mysql,redis等数据库;或者调用阿里的一些相关api都需要很多的参数。

        那么为了开发后期的灵活性,比如说线上线下的数据库相关参数不一样,再或者个人调用第三方api的时候用的是个人账户,上线需要切换到对应的企业账号。因此我们需要在开发之前将这些未来需要频繁更改的配置参数做好预处理。

        我这边个人应用的是TOML(语义化配置文件格式),关于toml的语法相关这里引用了作者(不灭的焱)。

        首先一个成熟的toml配置文件夹需要三个文件,线上、测试、本地这三个配置组成,灵活性较高,如下图:

         有了这三个文件,可以在线上线下本地无需修改即可开始测试。这里给大家一个文件内容,供大家理解。

  1. [api]
  2. ListenPort = 9900
  3. Debug = true
  4. LogLevel = "debug"
  5. Secret = "weifou@#!$%%&"
  6. [admin]
  7. ListenPort = 9901
  8. Debug = true
  9. LogLevel = "debug"
  10. Secret = "weifou@#!$%%&"
  11. [database.main]
  12. DSN = "root:amdin123@tcp(127.0.0.1:3306)/weifou?charset=utf8"
  13. ReadDSN = []
  14. Active = 10
  15. Idle = 10
  16. IdleTimeout = "300s"
  17. QueryTimeout = "1s"
  18. ExecTimeout = "1s"
  19. TranTimeout = "1s"
  20. [redis.main]
  21. Addr = "127.0.0.1:6379"
  22. Auth = ""
  23. DialTimeout = "1s"
  24. ReadTimeout = "200ms"
  25. WriteTimeout = "200ms"
  26. [wechat.weapp]
  27. AppID = "wx62c5c38678568751"
  28. AppSecret = "289b1cace9acd4d5d133f7ab0d95afdb"
  29. [yp.sms]
  30. ApiKey = "34c0f44269bd0bd45732b29fa21a01fa"
  31. # [im.config]
  32. # ClientID="YXA6Y3CoKtScRGy2ku7Qv_2MJQ"
  33. # ClientSecret="YXA6ROHDkSf0KRus86jGH1SVGLxkA6A"
  34. # OrgName="1102210802152303"
  35. # AppName="demo"
  36. # RequestUrl="http://a1.easemob.com/"
  37. [im.config]
  38. SDKAppID="1400570446"
  39. Identifier="administrator"
  40. UserSig="eJwszl8LgjAUBfDvcp-D7nRaDXoRegnpJUV9nG3FReefOayIvntgez3n8ON8IM*ugX6NZDWIfcIRN2tESveO7qQtCJDKUE*zs9INFv6DWbVyHEmBYBwx3iHniW-oAQLSc9vxUtqwutWLM1GT5t2pmLptTUV2GVRZ6Skfnm-T4NGTjowGwZKIxcgOkeeW9UIYIHx-AQAA---CuDVC"
  41. Url="https://console.tim.qq.com/v4/openim/"

这里再提供一个golang读取配置文件的方式供小白参考理解

  1. //在程序中使用配置文件获取参数
  2. func main(){
  3. var c conf
  4. conf=c.getconf
  5. fmt.Println(conf.Host)
  6. }
  7. type conf struct{
  8. Host string `yaml:"host"`
  9. User string `yaml:"user"`
  10. Pwd string `yaml:"pwd"`
  11. Dbname string `yaml:"dbname"`
  12. }
  13. func(c *conf)getConf()*conf{
  14. yamlFile, err := ioutil.ReadFile("conf.yaml")
  15. if err != nil {
  16. fmt.Println(err.Error())
  17. }
  18. err = yaml.Unmarshal(yamlFile, c)
  19. if err != nil {
  20. fmt.Println(err.Error())
  21. }
  22. return c
  23. }
  24. //golang toml格式配置文件读取
  25. //1、创建配置文件
  26. //2、创建对应配置文件信息的结构体
  27. //3、toml.DecodeFile(文件路径,对应数据库)

推荐阅读