从结构体中的切片中删除元素
在 Go 中,修改方法中的接收器对象需要使用指针接收器。这是一种用于传递对象引用而不是副本的技术,允许在方法内所做的更改反映在原始对象中。
考虑以下 Guest 结构:
type Guest struct { id int name string surname string friends []int }
要从“friends”切片中删除元素,最初可能会编写以下代码:
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 } } }
但是,此代码将无法按预期删除元素,因为“removeFriend”方法使用值接收器而不是指针接收器。因此,方法中对“friends”切片所做的更改不会反映在原始对象上。
要纠正此问题,应修改“removeFriend”方法以使用指针接收器:
func (self *Guest) removeFriend(id int) { // Same logic as before }
通过使用指针接收器,该方法现在修改原始对象而不是副本。结果,方法内对“friends”切片所做的更改成功反映在原始 Guest 对象上。
以上是为什么需要指针接收器来从 Go 结构体中的切片中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!