Golang - сбросить как WriteCloser - PullRequest
       31

Golang - сбросить как WriteCloser

2 голосов
/ 09 февраля 2020

Мне нужно было создать эквивалент ioutil.Discard , который может удовлетворить интерфейс «WriteCloser». С небольшим количеством Googling я придумал

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 ссылка на игровую площадку здесь

Есть ли более идиоматический c способ сделать это?

Справочная информация: некоторые стандартные библиотечные методы возвращают WriteCloser, например net / smtp.Data . При реализации автоматических тестов было бы хорошо иметь возможность выполнять такие функции, отправляя их вывод в Discard.

1 Ответ

0 голосов
/ 20 февраля 2020

Я взял чаевые bereal и посмотрел на NopCloser. Этот подход хорошо работает и полезен в тестовых функциях, построенных вокруг библиотек, которым требуется WriteCloser.

. Я переименовал тип в myWriteCloser, поскольку его можно использовать для продвижения «настоящих» авторов, таких как &bytes.Buffer, а также специальный системный писатель сброса.

type myWriteCloser struct {
    io.Writer
}

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