从结构体中的切片中删除元素
要从结构体中的切片中删除元素,必须使用指针接收器,而不是值接收者。值接收器修改原始结构的副本,而指针接收器修改原始结构本身。
代码示例
考虑此代码以从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中文网其他相关文章!