2015-01-26 9 views
6

Czy ktoś ma dobre lub jakiekolwiek wyjaśnienie funkcji Golanga NopCloser?
Rozejrzałem się, ale nie udało się znaleźć niczego oprócz wyjaśnienia głównego Doc Golang dnia:Golang io/ioutil NopCloser

NopCloser zwraca ReadCloser z no-op Zamknij metodą zawijania do przewidzianego Reader r.

Wszelkie wskazówki i wyjaśnienia byłyby mile widziane. Dzięki.

Odpowiedz

10

Kiedy trzeba zwrócić io.ReadCloser, upewniając się, że dostępny jest Close(), można użyć modelu NopCloser do zbudowania takiego czytnika ReaderCloser.

można zobaczyć jeden przykład w tym fork of gorest w 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

Służy do funkcji wymagających io.ReadCloser, ale bieżący obiekt (na przykład bytes.Buffer) nie zapewnia funkcji zamykania.

+0

tylko ioutil.NopCloser owija io.Reader. Możesz stworzyć swój własny odpowiednik, aby wyprodukować i.W.Witeite – krait

+0

@Krait, dobry połów. – OneOfOne