登录
首页 >  Golang >  Go问答

指针接收者方法会修改结构体吗?

来源:stackoverflow

时间:2024-03-03 09:57:24 428浏览 收藏

你在学习Golang相关的知识吗?本文《指针接收者方法会修改结构体吗?》,主要介绍的内容就涉及到,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!

问题内容

我正在尝试在 go 中实现一棵树。

type binarynode struct {
    left  *binarynode
    right *binarynode
    data  int
}

type binarytree struct {
    root *binarynode
}

现在插入元素,我有一个插入函数,

func (t *binarynode) insertnode(d int) {
    fmt.printf("%+v\n", t)
    if t == nil {
        t = &binarynode{
            data:  d,
            left:  nil,
            right: nil,
        }
        fmt.printf("%+v inside insert\n", t)
    } else {
        if d <= t.data {
            t.left.insertnode(d)
        } else {
            t.right.insertnode(d)
        }
    }
}

如果指针为nil,则创建一个新节点,如果不是则根据数据向左或向右查找。 在我的主要功能中,我正在尝试简单的几个步骤:

func main() {
    tree1 := &binarytree{
        root: nil,
    }
    tree1.root.insertnode(3)
    fmt.printf("%+v\n", tree1.root)
}

我期望看到的是一棵根值为 3 的树。 但我没有看到任何。相反,我得到:


&{left: right: data:3} inside insert

据我了解,如果结构体指针用于方法,则不会进行复制。在这种情况下,修改应该持续存在。

我在这里错过了什么?


解决方案


这是我可以做的最简单的解决方案,我希望它是不言自明的

type Bin struct {
    left, right *Bin
    value       int
}

func New(value int) *Bin {
    return &Bin{value: value}
}

func (b *Bin) Insert(value int) {
    if value <= b.value {
        if b.left == nil {
            b.left = New(value)
        } else {
            b.left.Insert(value)
        }
    } else {
        if b.right == nil {
            b.right = New(value)
        } else {
            b.right.Insert(value)
        }
    }
}

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>