golang 如何通过反射修改多层结构体中字段的值

例如我现在结构体定义:

type A struct {
  Id int
}

type B struct {
  MyA A
}

如果我已知一个A的对象a,我是可以直接修改a.Id的值的
但现在我有一个B的对象b,要修改b.MyA.Id的值,请问应该如何处理呢?
我尝试过通过反射b获得MyA的字段field,但是获得的field只能返回interface,实际情况下我并不能预知字段的类型而且字段会非常多,所以interface.(type)的方式也不现实。