Как представить OnePayload и ManyPayload, используя общий интерфейс - PullRequest
0 голосов
/ 26 февраля 2020

https://github.com/google/jsonapi/blob/master/node.go

Структуры OnePayload и ManyPayload в приведенной выше ссылке имеют общие поля:

Data
Included
Links
Meta

Я хочу написать метод, который принимает либо OnePayload или ManyPayload в качестве аргумента, и присваивайте значения Links и Meta следующим образом:

func DoSomething(payload interface{}) {
    ...
    payload.Links = links
    payload.Meta = meta
}

Но я получаю следующую ошибку:

payload.Links undefined (type interface{} has no field or method Links)
payload.Meta undefined (type interface{} has no field or method Meta)

Не могли бы вы посоветовать, как представлять OnePayload и ManyPayload, используя общий интерфейс, пожалуйста?

1 Ответ

1 голос
/ 26 февраля 2020

Вы можете использовать отражение:

func main() {
    op := OnePayload{}
    DoSomething(&op)
    fmt.Print(op)
}

func DoSomething(payload interface{}) {
    exampleLink := Links{}
    link := reflect.New(reflect.TypeOf(exampleLink))
    link.Elem().Set(reflect.ValueOf(exampleLink))

    reflect.ValueOf(payload).Elem().FieldByName("Links").Set(link)

}
...