首页 > 后端开发 > Golang > 正文

为什么需要指针接收器来从结构体的切片中删除元素?

Barbara Streisand
发布: 2024-11-17 11:29:02
原创
973 人浏览过

Why Do I Need a Pointer Receiver to Remove an Element from a Slice in a Struct?

从结构体中的切片中删除元素

要从结构体中的切片中删除元素,必须使用指针接收器,而不是值接收者。值接收器修改原始结构的副本,而指针接收器修改原始结构本身。

代码示例

考虑此代码以从Guest 结构:

type Guest struct {
    id      int
    name    string
    surname string
    friends []int
}

func (self Guest) removeFriend(id int) {
    for i, other := range self.friends {
        if other == id {
            self.friends = append(self.friends[:i], self.friends[i+1:]...)
            break
        }
    }
}
登录后复制

此代码将不起作用,因为它使用值接收器 (self Guest)。要修改原始结构体,您必须使用指针接收器 (self Guest)*。

正确代码

func (self *Guest) removeFriend(id int) {
    for i, other := range self.friends {
        if other == id {
            self.friends = append(self.friends[:i], self.friends[i+1:]...)
            break
        }
    }
}
登录后复制

现在,调用 guest1.removeFriend(3) 将从 guest1 结构中删除 ID 为 3 的好友。

注意:

另请注意,使用接收者名称,如 ( self)(this) 在 Go 中不是惯用的。相反,请使用结构体的名称,例如 (guest).

以上是为什么需要指针接收器来从结构体的切片中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板