有人对 Golang 的NopCloser
功能有很好的解释吗?
我环顾四周,但除了 Golang 的主要文档对以下内容的解释外,没有找到任何东西:
NopCloser 返回一个 ReadCloser,其中包含一个包装提供的 Reader r 的无操作 Close 方法。
任何指示或解释将不胜感激。谢谢。
每当您需要返回 aio.ReadCloser
时,在确保 aClose()
可用的同时,您可以使用 aNopCloser
来构建这样的 ReaderCloser。
您可以在gorest 的这个分支中看到一个示例,在util.go
//Marshals the data in interface i into a byte slice, using the Marhaller/Unmarshaller specified in mime.
//The Marhaller/Unmarshaller must have been registered before using gorest.RegisterMarshaller
func InterfaceToBytes(i interface{}, mime string) (io.ReadCloser, error) {
v := reflect.ValueOf(i)
if v.Kind() == reflect.Ptr {
v = v.Elem()
}
switch v.Kind() {
case reflect.Bool:
x := v.Bool()
if x {
return ioutil.NopCloser(bytes.NewBuffer([]byte("true"))), nil
}
它用于需要io.ReadCloser
但您当前对象(例如 a bytes.Buffer
)不提供 Close 函数的函数。
它适用于您需要提供具有Close
功能的项目,但
Close
该项目实际上没有意义的情况。因此,该函数几乎什么都不做:
func (nopCloser) Close() error { return nil }
https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L620