天天看點

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
           

顯式定義配置檔案的路徑、名稱和擴充名。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]}}

go