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)
}
有没有更惯用的方法来做到这一点?
背景:一些标准库方法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
}
我需要创建一个可以满足 "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)
}
有没有更惯用的方法来做到这一点?
背景:一些标准库方法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
}