首頁 >後端開發 >Golang >為什麼需要指標接收器來從結構體的切片中刪除元素?

為什麼需要指標接收器來從結構體的切片中刪除元素?

Barbara Streisand
Barbara Streisand原創
2024-11-17 11:29:021047瀏覽

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

從結構體中的切片中刪除元素

要從結構體中的切片中刪除元素,必須使用指針接收器,而不是值接收者。值接收器修改原始結構的副本,而指標接收器修改原始結構本身。

程式碼範例

考慮此程式碼以從來賓結構:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn