How To Convert A Byte Slice To io.Reader In Golang
In this article we are going to see how you can convert a byte slice to a io.Reader in Go (Golang). A byte slice is just a “dynamic” array (slice) of bytes in Go, which for example can represent any data in memory, like file contents, data sent across the network, etc… It might be useful to convert a byte slice into an io.Reader because the io.Reader allows us to compose it with other parts of our program and the Go standard library as it implements the Read
method.
byte slice to io.Reader
Let’s see an example on how we can convert a byte slice into an io.Reader in Go
package main
import (
"bytes"
"log"
)
func main() {
data := []byte("this is some data stored as a byte slice in Go Lang!")
// convert byte slice to io.Reader
reader := bytes.NewReader(data)
// read only 4 byte from our io.Reader
buf := make([]byte, 4)
n, err := reader.Read(buf)
if err != nil {
log.Fatal(err)
}
log.Println(string(buf[:n]))
}
The expected output is the following
2009/11/10 23:00:00 this
Try running this by yourself on the Go Playground https://play.golang.org/p/pzTj9J8aJyL
io.Reader to byte slice
Let’s see an example on how we can now convert a io.Reader into a byte slice in Go
package main
import (
"bytes"
"log"
"strings"
)
func main() {
ioReaderData := strings.NewReader("this is some data stored as a byte slice in Go Lang!")
// creates a bytes.Buffer and read from io.Reader
buf := &bytes.Buffer{}
buf.ReadFrom(ioReaderData)
// retrieve a byte slice from bytes.Buffer
data := buf.Bytes()
// only read the first 4 bytes
log.Println(string(data[:4]))
}
The expected output is the following
2009/11/10 23:00:00 this
Try running this by yourself on the Go Playground https://play.golang.org/p/TPVm7Y7XIus