有没有人对Golang的NopCloser
功能有好的或任何解释?我环顾四周,但除了Golang的主要文档解释之外没有找到任何东西:
NopCloser返回一个ReadCloser,其中包含一个无操作的Close方法 读者r。
任何指针或解释都将不胜感激。感谢。
答案 0 :(得分:18)
每当您需要返回io.ReadCloser
时,确保Close()
可用,您可以使用NopCloser
构建此类ReaderCloser。
您可以在fork of 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
}
答案 1 :(得分:9)
它用于需要io.ReadCloser
的函数,但您当前的对象(例如bytes.Buffer
)并未提供关闭功能。
答案 2 :(得分:1)
当您需要提供具有 Close
函数的项目时,但当
Close
对该项目没有真正意义。因此,该功能几乎
什么都不做:
func (nopCloser) Close() error { return nil }
https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L620