Удобный инструмент, который будет соответствовать вашим целям, можно найти в стандартной библиотеке: bytes.Buffer
( см. Пакет документов ).
Скажем, у вас есть объект, который реализует io.Reader
(то есть у него есть метод с подписью Read([]byte) (int, os.Error)
).
Типичным примером является os.File
:
f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)
Если вы хотите прочитать содержимое этого файла в строку, просто создайте bytes.Buffer
(его нулевое значение представляет собой готовый буфер, поэтому вам не нужно вызывать конструктор):
var b bytes.Buffer
Используйте io.Copy
для копирования содержимого файла в буфер:
n, err := io.Copy(b, f)
(Альтернативой использованию io.Copy
будет b.ReadFrom(f)
- они более или менее одинаковы.)
И вызовите метод String буфера, чтобы получить содержимое буфера в виде строки:
s := b.String()
bytes.Buffer
будет автоматически увеличиваться для хранения содержимого файла, поэтому вам не нужно беспокоиться о выделении и увеличении byte
фрагментов и т. Д.