Golang io / ioutil NopCloser

时间:2015-01-26 21:22:08

标签: go reader

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

  

NopCloser返回一个ReadCloser,其中包含一个无操作的Close方法   读者r。

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

3 个答案:

答案 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