I have an io.Reader
that doesn't require closing:
stringReader := strings.NewReader("shiny!")
And I want to pass it to a method that receives an io.ReadCloser
func readAndClose(source io.ReadCloser) {
...
}
How do I turn the io.Reader
into a io.ReadCloser
without specially creating a struct that implements the Close
method?
It's for an explicit definition of Reader and Closer interface. So let's say you write some functionality that reads data, but you also want to close resource after doing it (again not to leak descriptors). func ...( r io.ReaderCloser) { defer r.Close() ... // some reading }
The io package in Go provides input-output primitives as well as interfaces to them. It is one of the most essential packages in all of GoLang.
If you're certain that your io.Reader
doesn't require any actual closing, you can wrap it with an ioutil.NopCloser
.
As of version 1.16 ioutil.NopCloser
is deprecated.
NopCloser
has been moved to io
:
stringReader := strings.NewReader("shiny!") stringReadCloser := io.NopCloser(stringReader)
From the godoc:
NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r.
So we can apply it like:
stringReader := strings.NewReader("shiny!") stringReadCloser := ioutil.NopCloser(stringReader)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With