2015-01-26 18 views
6

Qualcuno ha una buona o nessuna spiegazione della funzione NopCloser di Golang?
Mi guardai intorno, ma non è riuscito a trovare qualcosa oltre la spiegazione di Doc principale di Golang di:Golang io/ioutil NopCloser

NopCloser restituisce un ReadCloser con un no-op metodo Close avvolgendo il fornito Reader r.

Qualsiasi suggerimento o spiegazione sarebbe apprezzato. Grazie.

risposta

10

Ogni volta che è necessario restituire un io.ReadCloser, mentre assicurandosi un Close() è disponibile, è possibile utilizzare un NopCloser per costruire una tale ReaderCloser.

Si può vedere un esempio in questo fork of gorest, in 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

Viene utilizzato per le funzioni che richiedono io.ReadCloser ma l'oggetto corrente (ad esempio un bytes.Buffer) non fornisce una funzione Chiudi.

+0

ioutil.NopCloser avvolge solo io.Reader. È possibile creare il proprio equivalente per produrre un io.WriteCloser – krait

+0

@Krait, buona cattura. – OneOfOne