如何创建一个通用函数来解组所有类型?

我在下面有一个函数,我想让它通用:


func genericUnmarshalForType1(file string) Type1 {


  raw, err := ioutil.ReadFile(file)


  if err != nil {

      fmt.Println(err.Error())

      os.Exit(1)

  }


  var type1 Type1


  json.Unmarshal(raw, &type1)

}

我想创建一个接受 Type1 或 Type2 的函数,而无需为每种类型创建一个函数。我怎样才能做到这一点?


一只名叫tom的猫
浏览 167回答 2
2回答

江户川乱折腾

以同样的方式json.Unmarshal做:func genericUnmarshal(file string, v interface{}) {    // File emulation.    raw := []byte(`{"a":42,"b":"foo"}`)    json.Unmarshal(raw, v)}游乐场:http : //play.golang.org/p/iO-cbK50BE。您可以通过实际返回遇到的任何错误来改进此功能。

隔江千里

Go 不支持泛型,但你可以这样写:func genericUnmarshalForType1(file string) interface{} {    raw, err := ioutil.ReadFile(file)    if err != nil {        fmt.Println(err.Error())        os.Exit(1)    }    var x interface{}    if err = json.NewDecoder(raw).Decode(x); err != nil {        return nil    }    return x}func main() {    x := genericUnmarshalForType1("filename.json");    var t1 Type1    var t2 Type2    switch t := x.(type) {    case Type1:        t1 = t    case Type2:        t2 = t    }}此外,我建议您阅读有关使用和数据类型的http://attilaolah.eu/2013/11/29/json-decoding-in-go/Unmarshal。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go