golang package viper

官方网站: 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
func SetConfigFile(in string)

显式定义配置文件的路径、名称和扩展名。Viper使用时不会检查任何配置路径。

func (v *Viper) ReadInConfig() error

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]}}

你可能感兴趣的:(go)