2015-01-26 3 views
6

Есть ли у кого-нибудь хорошее или какое-либо объяснение функции Голанга NopCloser?
я осмотрелся, но не смог найти ничего, кроме объяснения главного Дока Golang о:Golang io/ioutil NopCloser

NopCloser возвращает ReadCloser с не-оп Закрыть метод обертывания при условии чтения г.

Любые указатели или пояснения будут оценены. Благодарю.

ответ

10

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

Вы можете увидеть один пример в этом fork of 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 
     } 
2

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

+0

ioutil.NopCloser только обертывания io.Reader. Вы можете создать свой собственный эквивалент для создания io.WriteCloser – krait

+0

@Krait, хороший улов. – OneOfOne