duang5049 2017-03-17 00:26
浏览 9
已采纳

为什么附加不适用于切片?

I cannot figure out why the following code is not working:

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'
", string(input))
    rr.body = append(rr.body, input...)
    fmt.Printf("rr.body = '%s'
", 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'
", string(receiver.body))
}

https://play.golang.org/p/pxbgM8QVYB

I would expect to receive the output:

received 'foo'
rr.body = 'foo'
received 'foo'
rr.body = 'foofoo'
result = 'foofoo'

By instead it is not setting the resultReceiver.body at all?

  • 写回答

2条回答 默认 最新

  • dongshuan8722 2017-03-17 03:07
    关注

    You are trying to change the underlying state of your resultReceiver which requires a pointer to the struct. You have a function instead of a method:

    https://play.golang.org/p/zsF8mTtWpZ

    Checkout Steve Fancia's talk on Go mistakes; Numbers 4 and 5, Functions vs Methods and Pointers vs Values respectively, will be a good refresher for you.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥15 统计大规模图中的完全子图问题
  • ¥15 使用LM2596制作降压电路,一个能运行,一个不能
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
  • ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错