为了账号安全,请及时绑定邮箱和手机立即绑定

按值接收者与按指针混淆接收者

按值接收者与按指针混淆接收者

Go
交互式爱情 2022-07-25 10:52:32
我写了一个简单的堆栈实现。这按预期工作。package mainimport "fmt"type Stack struct {    data []interface{}}func (s *Stack) isEmpty() bool {    return len(s.data) == 0}func (s *Stack) push(item interface{}) {    s.data = append(s.data, item)    //fmt.Println(s.data, item)}func (s *Stack) pop() interface{} {    if len(s.data) == 0 {        return nil    }    index := len(s.data) - 1    res := s.data[index]    s.data = s.data[:index]    return res}func main() {    var stack Stack    stack.push("this")    stack.push("is")    stack.push("sparta!!")    for len(stack.data) > 0 {        x := stack.pop()        fmt.Println(x)    }}但是,如果我将三种方法从指针接收器更改为值接收器,如下所示。然后主要不打印任何东西。似乎每次我调用 push 方法时,堆栈都会重新初始化。这是为什么?func (s Stack) isEmpty() bool {func (s Stack) push(item interface{}) {func (s Stack) pop() interface{} {
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

在值接收器中,Go 制作变量的副本并对副本进行更改。只有在参考接收器中,实际stack变量才会更新。

更多详情, https://tour.golang.org/methods/4


查看完整回答
反对 回复 2022-07-25
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号