從結構體中的切片中刪除元素
要從結構體中的切片中刪除元素,必須使用指針接收器,而不是值接收者。值接收器修改原始結構的副本,而指標接收器修改原始結構本身。
程式碼範例
考慮此程式碼以從來賓結構:
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嘉賓)。若要修改原始結構體,您必須使用指標接收器 (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的好友struct.
注意:
也請注意,使用(self) 和(this) 等接收者名稱不是Go 中的慣用語。相反,請使用結構體的名稱,例如 (guest).
以上是為什麼需要指標接收器來從結構體的切片中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!