Golang - 丢弃为 WriteCloser

Golang - Discard as WriteCloser

我需要创建一个可以满足 "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

有没有更惯用的方法来做到这一点?

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

我接受了bereal的提示并查看了NopCloser。该方法效果很好,并且在围绕需要 WriteCloser.

的库构建的测试函数中很有用

我重命名了类型myWriteCloser,因为它可以用来推广"real" writer,例如&bytes.Buffer,以及特殊的系统丢弃writer。

type myWriteCloser struct {
    io.Writer
}

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