1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package conf
- import (
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "path"
- "strings"
- "github.com/zeromicro/go-zero/core/mapping"
- )
- var loaders = map[string]func([]byte, interface{}) error{
- ".json": LoadFromJsonBytes,
- ".toml": LoadFromTomlBytes,
- ".yaml": LoadFromYamlBytes,
- ".yml": LoadFromYamlBytes,
- }
- // Load loads config into v from file, .json, .yaml and .yml are acceptable.
- func Load(file string, v interface{}, opts ...Option) error {
- content, err := ioutil.ReadFile(file)
- if err != nil {
- return err
- }
- loader, ok := loaders[strings.ToLower(path.Ext(file))]
- if !ok {
- return fmt.Errorf("unrecognized file type: %s", file)
- }
- var opt options
- for _, o := range opts {
- o(&opt)
- }
- if opt.env {
- return loader([]byte(os.ExpandEnv(string(content))), v)
- }
- return loader(content, v)
- }
- // LoadConfig loads config into v from file, .json, .yaml and .yml are acceptable.
- // Deprecated: use Load instead.
- func LoadConfig(file string, v interface{}, opts ...Option) error {
- return Load(file, v, opts...)
- }
- // LoadFromJsonBytes loads config into v from content json bytes.
- func LoadFromJsonBytes(content []byte, v interface{}) error {
- return mapping.UnmarshalJsonBytes(content, v)
- }
- // LoadConfigFromJsonBytes loads config into v from content json bytes.
- // Deprecated: use LoadFromJsonBytes instead.
- func LoadConfigFromJsonBytes(content []byte, v interface{}) error {
- return LoadFromJsonBytes(content, v)
- }
- // LoadFromTomlBytes loads config into v from content toml bytes.
- func LoadFromTomlBytes(content []byte, v interface{}) error {
- return mapping.UnmarshalTomlBytes(content, v)
- }
- // LoadFromYamlBytes loads config into v from content yaml bytes.
- func LoadFromYamlBytes(content []byte, v interface{}) error {
- return mapping.UnmarshalYamlBytes(content, v)
- }
- // LoadConfigFromYamlBytes loads config into v from content yaml bytes.
- // Deprecated: use LoadFromYamlBytes instead.
- func LoadConfigFromYamlBytes(content []byte, v interface{}) error {
- return LoadFromYamlBytes(content, v)
- }
- // MustLoad loads config into v from path, exits on error.
- func MustLoad(path string, v interface{}, opts ...Option) {
- if err := Load(path, v, opts...); err != nil {
- log.Fatalf("error: config file %s, %s", path, err.Error())
- }
- }
|