私は、次のコードは動作しない理由を把握することはできません。代わりに、それはでresultReceiver.body
を設定されていないことでなぜ追加がスライスで機能しないのですか?
received 'foo'
rr.body = 'foo'
received 'foo'
rr.body = 'foofoo'
result = 'foofoo'
:
type Writer interface {
Write(input []byte) (int, error)
}
type resultReceiver struct {
body []byte
}
func (rr resultReceiver) Write(input []byte) (int, error) {
fmt.Printf("received '%s'\n", string(input))
rr.body = append(rr.body, input...)
fmt.Printf("rr.body = '%s'\n", string(rr.body))
return len(input), nil
}
func doWrite(w Writer) {
w.Write([]byte("foo"))
}
func main() {
receiver := resultReceiver{}
doWrite(receiver)
doWrite(receiver)
fmt.Printf("result = '%s'\n", string(receiver.body))
}
https://play.golang.org/p/pxbgM8QVYB
を私は出力を受け取ることを期待しますすべて?
受信機がポインタである必要があります。https://play.golang.org/p/zsF8mTtWpZ – mkopriva
ありがとうございました!私は参照によってそれを渡そうとしましたが、同じことをしました。修正は、Write()がポインタ上にある必要があるということでした: '* resultReceiver' –