2

我需要创建一个等效的ioutil.Discard来满足“WriteCloser”接口。通过一些谷歌搜索,我想出了

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)
}

去游乐场链接在这里

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

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

4

1 回答 1

1

我拿着bereal的小费看了看NopCloser。该方法效果很好,并且在围绕需要WriteCloser.

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

type myWriteCloser struct {
    io.Writer
}

func (myWriteCloser) Close() error {
    return nil
}
于 2020-02-19T21:24:48.583 回答