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