2017-06-26 3 views
2

Ich möchte den Fortschritt in einer io.Pipe verfolgen. Ich kam mit der folgenden Struktur ProgressPipeReader bis die io.PipeReader Wraps, innerhalb ProgressPipeReader.progress den Fortschritt in Bytes speichern:Wrap io.PipeReader zum Speichern des Fortschritts

type ProgressPipeReader struct { 
     io.PipeReader 
     progress int64 
} 

func (pr *ProgressPipeReader) Read(data []byte) (int, error) { 
     n, err := pr.PipeReader.Read(data) 

     if err == nil { 
       pr.progress += int64(n) 
     } 

     return n, err 
} 

Leider kann ich es nicht zu benutzen scheinen eine io.PipeReader zu wickeln. Der folgende Ausschnitt

pr, pw := io.Pipe() 
pr = &ProgressPipeReader{PipeReader: pr} 

ergibt den Fehler

cannot use pr (type *io.PipeReader) as type io.PipeReader in field value 

Irgendwelche Hinweise?

Antwort

2

Wie der Fehler beschreibt, versuchen Sie, einen *io.PipeReader Wert in einem io.PipeReader Feld zu speichern. Sie können dies beheben, indem Sie Ihre Strukturdefinition auf den korrekten Typ aktualisieren:

type ProgressPipeReader struct { 
     *io.PipeReader 
     progress int64 
} 
Verwandte Themen