Как изменить фрагмент интерфейса на фрагмент структуры - PullRequest
0 голосов
/ 05 октября 2019

Как установить фрагмент интерфейса на фрагмент структуры?

Я определяю интерфейс

type IFoo interface{
  //something methods
}

Я определяю struct

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

Я создаю фабрику структур и хочу изменить IFoo slice на кусочек конкретного типа структуры

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 голосов
/ 17 октября 2019

Я нашел решение

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

Спасибо всем за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...