http://tour.golang.org/methods/11的解决方案

Kok*_*zzu 16 go

练习:读者

实现一个发出ASCII字符"A"的无限流的Reader类型.

我不明白这个问题,如何发出字符'A'?我应该在哪个变量中设置该字符?

这是我试过的:

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?
}
Run Code Online (Sandbox Code Playgroud)

Kok*_*zzu 33

啊,我理解XD

我认为最好说:"将所有值重写[]byte'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{})
}
Run Code Online (Sandbox Code Playgroud)

  • 你几乎可以像原来的实现那样做,并且一次只提供1个字节,即`b [0] ='A'返回1,nil` (9认同)
  • @nos 使用 `b[0] = 'A'` 应该进行长度检查: `if len(b) > 0 {b[0] = 'A'}` 在使用 `for .. .范围`。 (3认同)