33

有人对 Golang 的NopCloser功能有很好的解释吗?
我环顾四周,但除了 Golang 的主要文档对以下内容的解释外,没有找到任何东西:

NopCloser 返回一个 ReadCloser,其中包含一个包装提供的 Reader r 的无操作 Close 方法。

任何指示或解释将不胜感激。谢谢。

4

3 回答 3

35

每当您需要返回 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
        }
于 2015-01-26T21:31:02.007 回答
15

它用于需要io.ReadCloser但您当前对象(例如 a bytes.Buffer)不提供 Close 函数的函数。

于 2015-01-26T21:30:53.400 回答
1

它适用于您需要提供具有Close功能的项目,但 Close该项目实际上没有意义的情况。因此,该函数几乎什么都不做:

func (nopCloser) Close() error { return nil }

https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L620

于 2021-04-07T00:44:16.430 回答