golang整潔之道(一)

設計工整的go項目配置文件

問題背景

  • 項目常常會涉及到配置文件,而配置文件每每包含多方的配置信息,可能同時涉及到MySQL,kafka,hive,hdfs等等。

不加思索的yaml配置文件

  • 最快,最直接的方案天然是以下示例,直接寫
  1. yaml部分golang

    hdfs_path: "/user/hive/warehouse/dm_user.db/user_vod_time/create_time="
    hdfs_host: "hdfsNode9"
    hdfs_port: "8020"
    eth_host: "http://127.0.0.1"
    eth_port: "8545"
    coin_password: "password"
  2. golang部分數據結構

    package config
    
    type config struct{
        HDFSPath string `yaml:"hdfs_path"`
        HDFSHost string `yaml:"hdfs_host"`
        HDFSPort string `yaml:"hdfs_port"`
        EthHost string `yaml:"eth_host"`
        EthPort string `yaml:"eth_port"`
        EthCoinPassword string `yaml:"coin_password"`
    }

這個方案存在什麼問題

  1. 沒有條理,雖然在命名方面能夠看出來對應的各個部分的配置,可是不夠清晰。假如項目規模增大,配置文件內容看上去就是一大坨
  2. 每個包,可能須要再額外定義一個相似的結構,保存相應的配置,形成代碼的冗餘。畢竟,以上邊這個例子來講,HDFS的處理跟ETH的處理不可能放在一個package裏,那對應的包要不要再定義一個數據結構,保存配置數據呢?

更加清晰的yaml配置文件

  • 利用golang struct的組合特性,就能夠讓結構更加清晰,減小代碼冗餘
  1. yaml文件設計

    hdfs: {
        path: "/user/hive/warehouse/dm_user.db/user_vod_time/create_time=",
        host: "hdfsNode9",
        port: "8020"
    }
    eth: {
        host: "http://127.0.0.1",
        port: "8545",
        coin_password: "password",
    }
  2. golang 文件——config包code

    type config struct {
        hdfs.HDFSConfig `yaml:"hdfs"`
        eth.EthConfig `yaml:"eth"`
    }
  3. golang文件——eth包接口

    type EthConfig struct {
        EthHost string `yaml:"host"`
        EthPort string `yaml:"port"`
        EthCoinPassword string `yaml:"coin_password"`
    }
  4. golang文件——hdfs包kafka

    type HDFSConfig struct {
        HDFSPath string `yaml:"path"`
        HDFSHost string `yaml:"host"`
        HDFSPort string `yaml:"port"`
    }

總結

  • 整個配置文件和代碼結構,重構以後瞬間清晰了不少。用代碼實現需求一般不難,大部分時候都有別人寫好的接口,直接調用就能夠。可是要想寫好golang,讓結構清晰,代碼健壯,接下來還須要花不少功夫。(藉助struct的組合,經常能夠讓代碼結構更加清晰)
相關文章
相關標籤/搜索