構造体のスライスから要素を削除する
構造体のスライスから要素を削除するには、ポインタ レシーバを使用する必要があります、値の受信者ではなく。値レシーバーは元の構造体のコピーを変更しますが、ポインター レシーバーは元の構造体自体を変更します。
コード例
このコードは、ゲスト構造体:
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) を呼び出すと、ID 3 の友人が guest1 から削除されます。 struct.
注:
また、(self) や (this) のようなレシーバー名を使用することはできないことにも注意してください。囲碁の慣用句。代わりに、(guest).
などの構造体の名前を使用します。以上が構造体のスライスから要素を削除するためにポインタ レシーバーが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。