代码拉取完成,页面将自动刷新
package conftool
import (
"fmt"
"os"
"path/filepath"
"strings"
"gitee.com/thincats/conftool/helper"
"github.com/pkg/errors"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
func addConfigFileSupport(sv *viper.Viper, configDir string, filename string) error {
const errHeader = "parse config file"
configDir, err := filepath.Abs(configDir)
if err != nil {
return errors.Wrap(err, errHeader)
}
if filename == "" {
return errors.Errorf("%s: config filename is empty", errHeader)
}
ext := strings.TrimPrefix(filepath.Ext(filename), ".")
if ext == "" {
ext = "yaml" // 默认读取yaml文件
}
// 文件名不带后缀
file := filepath.Base(filename)
sv.SetConfigName(file)
sv.AddConfigPath(configDir) // config dir
sv.SetConfigType(ext)
err = sv.ReadInConfig()
if err != nil {
return errors.Wrap(err, errHeader)
}
return nil
}
func addEnvSupport(sv *viper.Viper, envPrefix string) error {
// tell viper to load env variables
sv.AutomaticEnv()
sv.SetEnvPrefix(envPrefix)
sv.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
return nil
}
func addCommandLineSupport(sv *viper.Viper, config interface{}, args []string) error {
const errHeader = "parse command line"
flags := pflag.NewFlagSet("", pflag.ContinueOnError)
flattenConfigTypes, err := helper.FlattenStructReflectType(config)
if err != nil {
return errors.Wrap(err, errHeader)
}
flattenConfigTags, err := helper.FlattenStructFieldTag(config, "cli")
if err != nil {
return errors.Wrap(err, errHeader)
}
for k, v := range flattenConfigTypes {
cliTag := flattenConfigTags[k]
// only bind flag if tag cli set
if cliTag != "-" && cliTag != "" {
tagParser, err := helper.NewTagParser(cliTag)
if err != nil {
return errors.WithMessage(err, errHeader+": tag `cli`")
}
key := helper.LowerFirstInDotString(k)
helper.AddFlag(flags, key, v, tagParser.QueryByKey("usage"))
}
}
// Parse command-line first
err = flags.Parse(args)
if err != nil {
return errors.Wrap(err, errHeader)
}
sv.BindPFlags(flags)
return nil
}
func exitIfError(err error) {
// if help error, not print stack
if !IsHelpError(err) {
fmt.Printf("%+v\n", err)
}
os.Exit(1)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。