我在golang中使用类型断言,但似乎不起作用
func ParseYaml(filename string, config interface{}) interface{} {
tp := reflect.TypeOf(config)
tpN := tp.Name()
if realType, ok := config.(tpN); ok { // Error: tell me tpN is not a type ,how to handle this ?
yamlFile, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
err = yaml.Unmarshal(yamlFile, &realType)
if err != nil {
panic(err)
}
log.Println("------", config)
return realType
}
return nil
}
就像代码一样,告诉我tpN不是类型,如何处理呢? ks。
答案 0 :(得分:-4)
我要使用ParseYaml加载配置文件,输出为全局配置
示例:
type Config struct {
Protocol string `yaml:"protocal"`
EndPoint string `yaml:"endpoint"`
AccessKeyID string `yaml:"accesskeyID"`
AccessKeySecret string `yaml:"accesskeySecret"`
PubBucketName string `yaml:"pubBucketName"`
PriBucketName string `yaml:"priBucketName"`
CommonPrefix string `yaml:"commonPrefix"`
Port string `yaml:"port"`
}
var GlobalConf Config
func main(){
ParseYaml(filename, GlobalConf) //load config
}
func ParseYaml(filename string, config interface{}) { // just need pass the pointer , and the config value will be changed
yamlFile, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
if err := yaml.Unmarshal(yamlFile, config); err != nil {
panic(err)
}
fmt.Println(config)
}