samedi 19 août 2017

Accessing all fields from an instance using composition in Go?

I have a struct named Parent that is designed to be used in composition:

package main

import (
    "fmt"
    "reflect"
)

type Parent struct {
    Field1 int
}

func (p *Parent) Display() {
    t := reflect.TypeOf(p).Elem()
    for i := 0; i < t.NumField(); i++ {
        fmt.Println(t.Field(i).Name)
    }
}

type Child struct {
    Parent
    Field2 int
}

func main() {
    c := &Child{}
    c.Display()
}

I would like the parent to be able to access both Field1 and Field2 using reflection. For example, the code above will only output Field1 since the type of p is Parent.

Is there a way (using reflection) for Display() to determine that the Parent is part of a Child and display all of its fields as well? Unfortunately, I cannot perform a .(*Child) type assertion since many different types will be using Parent.





Aucun commentaire:

Enregistrer un commentaire