【问题标题】:Golang - Discard as WriteCloserGolang - 丢弃为 WriteCloser
【发布时间】:2020-02-09 19:20:57
【问题描述】:

我需要创建一个可以满足“WriteCloser”接口的ioutil.Discard 等价物。通过谷歌搜索我想出了

package main

import (
    "io"
    "io/ioutil"
    "strings"
    "fmt"
)

type discardCloser struct {
    io.Writer
}

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

func main() {
    src := strings.NewReader("Hello world")
    dst := discardCloser{Writer: ioutil.Discard}
    count, err := io.Copy(dst, src)
    fmt.Println(count, err)
    err = dst.Close()
    fmt.Println(err)
}

Go playground link here

有没有更惯用的方法?

背景:一些标准库方法返回一个WriteCloser,例如net/smtp.Data。在实现自动化测试时,能够执行这样的功能,同时将它们的输出发送到 Discard,真是太好了。

【问题讨论】:

  • 我认为,这已经足够好了,因为这正是 NopCloserio.Reader 的标准库中实现的方式。
  • 谢谢你,这让我相信这可能不会太不雅!

标签: go dev-null


【解决方案1】:

我拿了bereal 的小费,看了看NopCloser。该方法效果很好,并且在围绕需要WriteCloser 的库构建的测试函数中很有用。

我重命名了 myWriteCloser 类型,因为它可以用于提升“真实”写入器,例如 &bytes.Buffer,以及特殊的系统丢弃写入器。

type myWriteCloser struct {
    io.Writer
}

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

【讨论】:

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