Golang io/ioutil NopCloser

у кого-нибудь есть хорошие или какие-либо объяснения по Golang NopCloser?
Я посмотрел вокруг, но не удалось найти ничего, кроме объяснения основных Golang же документа:

NopCloser возвращает ReadCloser с методом закрытия no-op, обертывающим при условии читателя r.

любые указатели или объяснение будут оценены. Спасибо.

2 ответов


всякий раз, когда вам нужно вернуть io.ReadCloser, убедившись, что Close() доступно, вы можете использовать NopCloser построить такой ReaderCloser.

вы можете увидеть один пример в этом форк gorest, в util.go

//Marshals the data in interface i into a byte slice, using the Marhaller/Unmarshaller specified in mime.
//The Marhaller/Unmarshaller must have been registered before using gorest.RegisterMarshaller
func InterfaceToBytes(i interface{}, mime string) (io.ReadCloser, error) {
    v := reflect.ValueOf(i)
    if v.Kind() == reflect.Ptr {
        v = v.Elem()
    }
    switch v.Kind() {
    case reflect.Bool:
        x := v.Bool()
        if x {
            return ioutil.NopCloser(bytes.NewBuffer([]byte("true"))), nil
        }

Он используется для функций, которые требуют io.ReadCloser но ваш текущий объект (например, a bytes.Buffer) не обеспечивает функцию закрытия.