官方网站: https://godoc.org/github.com/spf13/viper
go get -u -v github.com/spf13/viper
func (v *Viper) ConfigFileUsed() string
func (v *Viper) Unmarshal(rawVal interface{}, opts ...DecoderConfigOption) error
显式定义配置文件的路径、名称和扩展名。Viper使用时不会检查任何配置路径。
cat config.yaml
TimeStamp: "2019-01-02 16:26:20"
Author: "Geek"
Information:
Name: "Jim"
Age: 18
cat main.go
package main
import (
"fmt"
"github.com/spf13/viper"
)
func main() {
v := viper.New()
// 设置配置文件的名字为config
v.SetConfigName("config")
// 设置配置文件类型
v.SetConfigType("yaml")
//添加配置文件所在的路径
v.AddConfigPath("./")
// 读配置文件
if err := v.ReadInConfig(); err != nil {
fmt.Println(err)
}
fmt.Printf("TimeStamp : %s\n", v.Get("TimeStamp"))
fmt.Printf("Author : %s\n", v.Get("Author"))
fmt.Printf("Name : %s\n", v.Get("information.Name"))
fmt.Printf("Name : %d\n", v.GetInt("information.Age"))
}
运行结果
TimeStamp : 2019-01-02 16:26:20
Author : Geek
Name : Jim
Name : 18
序列化到结构体
cat config.yaml
TimeStamp: "2019-01-02 16:26:20"
Author: "Geek"
Information:
Name: "Jim"
Age: 18
Hobby:
- "run"
- "music"
cat main.go
package main
import (
"fmt"
"github.com/spf13/viper"
)
type Information struct {
Name string
Age int
Hobby []string
}
type YmalInfo struct {
TimeStamp string
Author string
Information Information
}
func main() {
v := viper.New()
// 设置配置文件的名字为config
v.SetConfigName("config")
// 设置配置文件类型
v.SetConfigType("yaml")
//添加配置文件所在的路径
v.AddConfigPath("./")
// 读配置文件
if err := v.ReadInConfig(); err != nil {
fmt.Println(err)
}
// 反序列化为结构体
var yamlinfo YmalInfo
if err := v.Unmarshal(&yamlinfo); err != nil {
fmt.Println(err)
}
fmt.Println(yamlinfo)
}
运行结果:
{2019-01-02 16:26:20 Geek {Jim 18 [run music]}}
package main
import (
"fmt"
"github.com/spf13/viper"
)
type Information struct {
Name string
Age int
Hobby []string
}
type YmalInfo struct {
TimeStamp string
Author string
Information Information
}
func main() {
viper.SetConfigFile("./config.yaml")
fmt.Println(viper.ConfigFileUsed())
// 读配置文件
if err := viper.ReadInConfig(); err != nil {
fmt.Println(err)
}
// 反序列化为结构体
var yamlinfo YmalInfo
if err := viper.Unmarshal(&yamlinfo); err != nil {
fmt.Println(err)
}
fmt.Println(yamlinfo)
}
运行结果:
./config.yaml
{2019-01-02 16:26:20 Geek {Jim 18 [run music]}}
package main
import (
"fmt"
"github.com/spf13/viper"
)
type Information struct {
Name string
Age int
Hobby []string
}
type YmalInfo struct {
Time string `mapstructure:"TimeStamp"` // 进行映射
Author string
Information Information
}
func main() {
viper.SetConfigFile("./config.yaml")
fmt.Println(viper.ConfigFileUsed())
// 读配置文件
if err := viper.ReadInConfig(); err != nil {
fmt.Println(err)
}
// 反序列化为结构体
var yamlinfo YmalInfo
if err := viper.Unmarshal(&yamlinfo); err != nil {
fmt.Println(err)
}
fmt.Println(yamlinfo)
}
运行结果:
./config.yaml
{2019-01-02 16:26:20 Geek {Jim 18 [run music]}}