前言
在项目中,往往有些属性是不能硬编码到代码中的,例如数据库链接、账号信息等。因此需要我们能在将这些数据写到配置文件中,在项目中读取。
本文仅用于记录如何使用yaml.v2
和Viper
读取配置文件。
代码实战
创建结构体
编写config.yml
,以及对应的结构体config.go
,代码如下。
app: host: 127.0.0.1 port: 3306 username: admin password: admin log: suffix: log maxSize: 5 package config
package configtype Config struct { App *App `yaml:"app"` Log *Log `yaml:"log"`}type App struct { Host string `yaml:"host"` Port int `yaml:"port"` Username string `yaml:"username"` Password string `yaml:"password"`}type Log struct { Suffix string `yaml:"suffix"` MaxSize int `yaml:"maxSize"`}
使用yaml.v2读取配置文件
1、运行以下命令,导入yaml.v2。
go get gopkg.in/yaml.v2
2、使用ioutil
导入配置文件,使用yaml.Unmarshal
将配置文件读取到结构体中,示例代码如下。
package mainimport ( "GoReadConfig/config" "fmt" "gopkg.in/yaml.v2" "io/ioutil")func InitConfig() { yamlFile, err := ioutil.ReadFile("./config/config.yml") if err != nil { fmt.Println(err.Error()) } var _config *config.Config err = yaml.Unmarshal(yamlFile, &_config) if err != nil { fmt.Println(err.Error()) } fmt.Printf("config.app: %#v\n", _config.App) fmt.Printf("config.log: %#v\n", _config.Log)}func main() { InitConfig()}
使用Viper读取配置文件
yaml.v2只能读取yaml格式的文件,而Viper可以处理多种格式的配置,目前已支持从JSON、TOML、YAML、HCL、INI和Java properties文件中读取配置数据。
Viper还能监视配置文件的变动、重新读取配置文件。在项目中可以用作热加载。
其他的特性,可以参考github上Viper的官方说明,此处不再赘述。
1、运行以下命令,导入Viper
。
go get github.com/spf13/viper
2、使用Viper
导入配置文件,并将配置文件读取到结构体中,示例代码如下。
package mainimport ( "GoReadConfig/config" "fmt" "github.com/spf13/viper")func InitConfigByViper() { viper.SetConfigType("yaml") viper.SetConfigFile("./config/config.yml") err := viper.ReadInConfig() if err != nil { fmt.Println(err.Error()) } var _config *config.Config err = viper.Unmarshal(&_config) if err != nil { fmt.Println(err.Error()) } fmt.Printf("config.app: %#v\n", _config.App) fmt.Printf("config.log: %#v\n", _config.Log)}func main() { InitConfigByViper()}
有疑问加站长微信联系(非本文作者)