Функция Copy
func Copy(dst Writer, src Reader) (written int64, err error)
Copy копирует из src в dst, пока на src не будет достигнут EOF или пока не произойдет ошибка. Возвращает количество скопированных байтов и первую ошибку, обнаруженную при копировании, если таковые имеются.
При успешном копировании возвращается err == nil, а не err == EOF. Поскольку копирование определено для чтения из src до EOF, оно не рассматривает EOF из чтения как ошибку, о которой будет сообщено.
Если src реализует интерфейс WriterTo, копия реализуется путем вызова src.WriteTo(dst). В противном случае, если dst реализует интерфейс ReaderFrom, копия реализуется путем вызова dst.ReadFrom(src).
package main
import (
"io"
"log"
"os"
"strings"
)
func main() {
r := strings.NewReader("some io.Reader stream to be read\n")
if _, err := io.Copy(os.Stdout, r); err != nil {
log.Fatal(err)
}
}
Вывод:
some io.Reader stream to be read
Функция CopyBuffer
func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)
CopyBuffer идентичен Copy, за исключением того, что он поэтапно использует предоставленный буфер (если он необходим), а не выделяет временный. Если buf равен nil, выделяется один новый; в противном случае, если он имеет нулевую длину, CopyBuffer паникует.
Если src реализует WriterTo или dst реализует ReaderFrom, buf не будет использоваться для выполнения копирования.
package main
import (
"io"
"log"
"os"
"strings"
)
func main() {
r1 := strings.NewReader("first reader\n")
r2 := strings.NewReader("second reader\n")
buf := make([]byte, 8)
// buf используется здесь...
if _, err := io.CopyBuffer(os.Stdout, r1, buf); err != nil {
log.Fatal(err)
}
// ... переиспользуется также здесь.
// Нет необходимости выделять дополнительный буфер.
if _, err := io.CopyBuffer(os.Stdout, r2, buf); err != nil {
log.Fatal(err)
}
}
Вывод:
first reader
second reader
Функция CopyN
func CopyN(dst Writer, src Reader, n int64) (written int64, err error)
CopyN копирует n байтов (или до ошибки) из src в dst. Возвращает количество скопированных байтов и самую раннюю ошибку, возникшую при копировании. По возвращении written == n только тогда, когда err == nil.
Если dst реализует интерфейс ReaderFrom, копия реализуется с его помощью.
package main
import (
"io"
"log"
"os"
"strings"
)
func main() {
r := strings.NewReader("some io.Reader stream to be read")
if _, err := io.CopyN(os.Stdout, r, 5); err != nil {
log.Fatal(err)
}
}
Вывод:
some
Читайте также:
- Как использовать функцию copy в Golang
- Спецификация Go: добавление в срезы и копирование срезов
- Как использовать интерфейс io.Writer в Golang
Комментариев нет:
Отправить комментарий