mirror of
https://github.com/spf13/viper
synced 2024-12-22 19:47:01 +00:00
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
|
package viper_test
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/sagikazarmark/locafero"
|
||
|
"github.com/spf13/afero"
|
||
|
|
||
|
"github.com/spf13/viper"
|
||
|
)
|
||
|
|
||
|
func ExampleFinder() {
|
||
|
fs := afero.NewMemMapFs()
|
||
|
|
||
|
fs.Mkdir("/home/user", 0o777)
|
||
|
|
||
|
f, _ := fs.Create("/home/user/myapp.yaml")
|
||
|
f.WriteString("foo: bar")
|
||
|
f.Close()
|
||
|
|
||
|
// HCL will have a "lower" priority in the search order
|
||
|
fs.Create("/home/user/myapp.hcl")
|
||
|
|
||
|
finder := locafero.Finder{
|
||
|
Paths: []string{"/home/user"},
|
||
|
Names: locafero.NameWithExtensions("myapp", viper.SupportedExts...),
|
||
|
Type: locafero.FileTypeFile, // This is important!
|
||
|
}
|
||
|
|
||
|
v := viper.NewWithOptions(viper.WithFinder(finder))
|
||
|
v.SetFs(fs)
|
||
|
v.ReadInConfig()
|
||
|
|
||
|
fmt.Println(v.GetString("foo"))
|
||
|
|
||
|
// Output:
|
||
|
// bar
|
||
|
}
|
||
|
|
||
|
func ExampleFinders() {
|
||
|
fs := afero.NewMemMapFs()
|
||
|
|
||
|
fs.Mkdir("/home/user", 0o777)
|
||
|
f, _ := fs.Create("/home/user/myapp.yaml")
|
||
|
f.WriteString("foo: bar")
|
||
|
f.Close()
|
||
|
|
||
|
fs.Mkdir("/etc/myapp", 0o777)
|
||
|
fs.Create("/etc/myapp/config.yaml")
|
||
|
|
||
|
// Combine multiple finders to search for files in multiple locations with different criteria
|
||
|
finder := viper.Finders(
|
||
|
locafero.Finder{
|
||
|
Paths: []string{"/home/user"},
|
||
|
Names: locafero.NameWithExtensions("myapp", viper.SupportedExts...),
|
||
|
Type: locafero.FileTypeFile, // This is important!
|
||
|
},
|
||
|
locafero.Finder{
|
||
|
Paths: []string{"/etc/myapp"},
|
||
|
Names: []string{"config.yaml"}, // Only accept YAML files in the system config directory
|
||
|
Type: locafero.FileTypeFile, // This is important!
|
||
|
},
|
||
|
)
|
||
|
|
||
|
v := viper.NewWithOptions(viper.WithFinder(finder))
|
||
|
v.SetFs(fs)
|
||
|
v.ReadInConfig()
|
||
|
|
||
|
fmt.Println(v.GetString("foo"))
|
||
|
|
||
|
// Output:
|
||
|
// bar
|
||
|
}
|