Во-первых, замечание по терминологии: похоже, вы говорите о байтовых срезах , а не о байтовых массивах. Массивы в Go имеют фиксированную длину, поэтому вызов append
для них не сработает. Подробнее см. здесь .
Теперь к вашему вопросу ...
Я пытаюсь создать для l oop, который преобразует любой тип данных в байтовый массив ...
Это невозможно, за исключением самого поверхностного, бессмысленного смысла. Например, если у вас есть переменная типа net.Conn
, преобразование ее в байты даст вам бессмысленное значение, поскольку оно имеет смысл только в сочетании с одним конкретным c, активным сетевым подключением.
Однако , предполагая, что у вас нет переменных, которые относятся к эфемерному состоянию, как это, самый простой способ преобразовать произвольные переменные в байтовый срез - это что-то вроде gob encoding .
Однако это также имеет ограничения в том, что при сериализации структур он может получить доступ только к экспортированным полям или к тем, которые отображаются через интерфейс GobEncoder . В этом разделе вопросов и ответов объясняется, почему существует это ограничение .
Теперь, в некоторых случаях вы можете обойти это ограничение, например, с помощью отражения, но это очень обременительно и обычно неразумно, поскольку Неэкспортированные поля часто ссылаются на эфемерное состояние (см. примечание выше).
Итак, в итоге: невозможно осмысленно сделать это для всех типов данных. Это сложно сделать для многих типов данных, и тривиально сделать это для «обычных» типов данных.