У вас есть указатель на структуру BookInfo
, тип *BookInfo
. И тип поля BookInfo.Meta
также является указателем, он имеет тип *TableMeta
, таким образом, *BookInfo
можно рассматривать как **TableMeta
, следовательно, "двойной" указатель.
Это правда, что указатель структуры указывает на свое первое поле, но не опирается на него. Это хрупкое. Если вы добавите поле перед ним, оно будет плохо работать (что произойдет только во время выполнения, без сообщений во время компиляции из-за пакета unsafe
).
Так что, если значение имеет тип *BookInfo
, просто получите его из оболочки reflect.Value
, тогда вы можете ссылаться на его поле как value.Meta
, которое будет иметь тип *TableMeta
. Не используйте пакет unsafe
, особенно если он не нужен.