类型断言不正确,告诉我不是类型

时间:2019-05-09 07:48:09

标签: go

我在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。

1 个答案:

答案 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)

}