2015-01-08 14 views
9

Exercise: ReadersGiải pháp cho http://tour.golang.org/methods/11

Thực hiện một loại Reader phát ra một dòng vô hạn của các ký tự ASCII 'A'.

Tôi không hiểu câu hỏi, cách phát ra ký tự 'A'? vào biến nào tôi nên đặt ký tự đó?

Đây là những gì tôi đã cố gắng:

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

đọc nên đọc dữ liệu vào bộ đệm được cung cấp, không gắn thêm vào bộ đệm đó. – Arjan

+0

câu trả lời: https://gist.github.com/inancgumus/d25d045b4cec43dcbb111e04980d396b –

Trả lời

22

Ah Tôi hiểu XD

Tôi nghĩ rằng nó sẽ được tốt hơn để nói: "viết lại tất cả các giá trị trong []byte vào '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

Bạn có thể thực hiện nó gần như là triển khai ban đầu của mình, và chỉ cung cấp 1 byte cùng một lúc, tức là 'b [0] = 'A' return 1, nil' – nos

+1

@nos Sử dụng 'b [0] = 'A'' nên đi kèm với một kiểm tra độ dài:' nếu len (b)> 0 {b [0] =' A '} 'là ẩn trong trường hợp sử dụng' cho ... dải ô'. – icza