【问题标题】:Golang io/ioutil NopCloserGolang io/ioutil NopCloser
【发布时间】:2015-01-26 21:22:08
【问题描述】:

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

NopCloser 返回一个 ReadCloser,其中包含一个包装 提供读者 r。

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

【问题讨论】:

    标签: go reader


    【解决方案1】:

    当您需要返回io.ReadCloser,同时确保Close() 可用时,您可以使用NopCloser 来构建这样的ReaderCloser。

    您可以在fork of gorestutil.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
            }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • ioutil.NopCloser 仅包装 io.Reader。您可以创建自己的等价物来生成 io.WriteCloser
      • 它还具有您希望能够多次读取而不丢失内容的用途,如本例所示:medium.com/@xoen/…
      【解决方案3】:

      当您需要提供具有Close 功能的项目时, Close 对那个项目没有意义。因此,该功能几乎 什么都不做:

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-03
        • 1970-01-01
        • 2021-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        • 1970-01-01
        • 2019-07-14
        相关资源
        最近更新 更多