2

I am currently doing the following

func Test(controller interface{}) {
    controllerType := reflect.TypeOf(controller)
    controllerFunc := reflect.ValueOf(controller)
    controllerStruct := reflect.New(controllerType.In(0))
    for i := 0; i < controllerStruct.Elem().NumField(); i++ {
        if controllerStruct.Elem().Field(i).Kind().String() == "ptr" {
            controllerStruct.Elem().Field(i).Set(
                reflect.New(
                    controllerStruct.Elem().Field(i).Type(),
                ).Elem(),
            )
        }
    }
    controllerFunc.Call([]reflect.Value{
        controllerStruct.Elem(),
    })
}

Using the following function call

Test(controllers.Test.IsWorking)

type Test struct {
    Name string
    H    *Hello
}

type Hello struct {
    Friend string
}

func (t Test) IsWorking() {
    log.Println(t.H)
}

t.H is always nil even tho I am setting it on the for loop. Also I am not sure if this is the correct way to make this since what about if Hello struct contains another pointer to a struct. Is there a better method to achieve what I am trying to do and why is t.H nil if I am setting it up

1 Answer 1

2

t.H is nil because you are giving an incorrect value in Set method. You are getting Value of reflect.New's return (reflect.New(...).Elem() is Hello type, no *Hello type and type of H field is *Hello type). If you change the type of Hfield to Hello type, you will see that it is initialized okay Then, you should do this:

controllerStruct.Elem().Field(i).Set(
    reflect.New(
        controllerStruct.Elem().Field(i).Type().Elem(),
    ),
)

Value of reflect.New(controllerStruct.Elem().Field(i).Type().Elem()) is a new *Hello struct.

I hope that it's useful to you! :-)

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.