2015-01-08 10 views
9

Exercise: ReadersRozwiązanie dla http://tour.golang.org/methods/11

Wdrożenie typ czytnika, który emituje nieskończony strumień znak ASCII „A”.

Nie rozumiem pytania, jak emitować znak "A"? do jakiej zmiennej mam ustawić tę postać?

Oto, co starałem:

package main 
import "code.google.com/p/go-tour/reader" 
type MyReader struct{} 
// TODO: Add a Read([]byte) (int, error) method to MyReader. 
func (m MyReader) Read(b []byte) (i int, e error) { 
    b = append(b,'A') // this is wrong.. 
    return 1, nil // this is also wrong.. 
} 
func main() { 
    reader.Validate(MyReader{}) // what did this function expect? 
} 
+1

Czytaj powinien odczytać dane do dostarczonego bufora, nie dołączać do niego. – Arjan

+0

odpowiedzi: https://gist.github.com/inancgumus/d25d045b4cec43dcbb111e04980d396b –

Odpowiedz

22

Ach rozumiem XD

myślę, że byłoby lepiej powiedzieć: "przepisać wszystkie wartości w []byte w 'A' s"

package main 

import "code.google.com/p/go-tour/reader" 

type MyReader struct{} 

// TODO: Add a Read([]byte) (int, error) method to MyReader. 
func (m MyReader) Read(b []byte) (i int, e error) { 
    for x := range b { 
     b[x] = 'A' 
    } 
    return len(b), nil 
} 

func main() { 
    reader.Validate(MyReader{}) 
} 
+6

Można to zrobić prawie tak samo jak oryginalną implementację i wystarczy podać po prostu 1 bajt, tzn. 'B [0] = 'A' return 1, nil' – nos

+1

@nos Użycie 'b [0] = 'A'' powinno przyjść z sprawdzeniem długości:' if len (b)> 0 {b [0] =' A '} 'co jest niejawne w przypadku użycia' dla ... zakresu ". – icza

Powiązane problemy