Go - статически типизированный язык, тип a
должен быть известен во время компиляции.А поскольку Go пока не поддерживает генерики, вы не можете делать то, что хотите.
Попробуйте найти какое-то другое решение, например, абстрагировать то, что вы хотите сделать с a
, в интерфейс,и конкретные типы реализуют этот интерфейс.Тогда a
может быть переменной этого типа интерфейса, и вы можете вызывать методы этого типа.
Если вы можете достичь этого, на самом деле вы даже можете изменить параметр типа data
на этот интерфейс,и не требуется утверждение типа или переключение типа.
В качестве альтернативы вы можете использовать отражение для доступа к общим полям (либо для получения, либо для установки), идентифицированным по их имени, но отражение не дает гарантии времени компиляции, и обычно оно меньшеэффективный.Пример того, как это сделать, приведен в следующем вопросе: Подтвердите интерфейс к его типу