Необходимо генерировать исполняемый двоичный кодированный файл в golang - PullRequest
0 голосов
/ 06 марта 2019

Я работаю над проектом, в котором мне нужно сгенерировать файл в двоичном коде (байты). Дело в том, что я не хочу хранить файл, а просто нуждаюсь в закодированных данных для проверки с некоторыми тестовыми данными.

Вот пример кода, который у меня есть ZIP-файл

Приведенный выше пример относится к zip, но я не ограничен использованием zip или файлов любого типа. И здесь нам нужен сохраненный файл для чтения, но я не хочу хранить и удалять файл позже.

Я знаю, что у него не так много усилий, чтобы попросить о помощи, но, как новичок, я пришел к этому только.

Спасибо.

1 Ответ

3 голосов
/ 06 марта 2019

Лучше не полагаться на конкретные типы (например, os.File), а использовать вместо этого интерфейсы, описывающие функциональные возможности, для которых вы хотите использовать файл.

Например, еслиу вас есть функция, которая принимает файл, потому что он хочет прочитать из него, вместо этого используйте io.Reader:

func process(r io.Reader) error {
    // ...
}

Аналогично, если вы хотите записать в файл, используйте io.Writer, или если вы хотите сделать оба, используйте io.ReadWriter или io.ReadWriteCloser.Вы можете передать значение *os.File этим функциям, потому что *os.File реализует эти интерфейсы.

Преимущество этого состоит в том, что вы можете вызывать эти функции с любыми значениями, которые реализуют интерфейс.Если вы хотите протестировать эти функции, вы можете передать в память bytes.Buffer, который реализует io.Reader и io.Writer, и чей контент вы можете создать вручную, во время выполнения, например:

buf := &bytes.Buffer{}
buf.Write([]byte{1, 2, 3})
buf.WriteString("Hello")

Здесь buf будет содержать байты 1, 2, 3 и строку "Hello".После этого вы можете передать buf там, где требуется читатель или писатель, например:

process(buf)

См. Похожие / связанные вопросы и примеры:

Заполните os.Stdin для функциикоторый читает из него

Пример кода для тестирования файловой системы в Golang

...