官方網站: 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]}}