如何将接口切片更改为结构切片

时间:2019-10-05 13:31:28

标签: go struct interface slice

如何将接口切片设置为结构切片?

我定义界面

type IFoo interface{
  //something methods
}

我定义了结构

type Foo struct{
  Id int `json:"Id"`
  //somethig fields
}

我创建了结构工厂,我想将IFoo slice更改为concette结构类型的切片

func FooFactory (p *[]IFoo) {
  *p = *(*[]IFoo)(unsafe.Pointer(&[]Foo{})
  //here I try something like unsafe.Pointer, reflect.SliceHeader but nothing does not works
}

然后我想将结果用于Unmarshal json:

func main() {
  var o []IFoo
  FooFactory(&o)
  j := []byte(`[{"Id":1}, {"Id":2}]`)
  json.Unmarshal (j, &o)
  fmt.Println(o)
}

我得到了[map [Id:1] map [Id:2]] 但我想得到[{1} {2}]

如果我将var o定义为[] Foo,则会得到预期的结果,但是我不能将具体的结构类型用作抽象。

怎么办?谢谢你,我英语不好。

1 个答案:

答案 0 :(得分:0)

我找到了解决办法

https://play.golang.org/p/syNVY0KTtM2

谢谢大家的帮助