Home > Backend Development > Golang > How to Remove Elements from a Slice Within a Struct in Go?

How to Remove Elements from a Slice Within a Struct in Go?

Patricia Arquette
Release: 2024-11-14 16:29:02
Original
537 people have browsed it

How to Remove Elements from a Slice Within a Struct in Go?

Removing Elements from a Slice Within a Struct

In Go, structs are aggregates of fields, which can include slices. When a method attempts to modify the receiver (i.e., the struct itself), it must use a pointer receiver to update the original value rather than creating a copy.

Consider the following code:

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
        }
    }
}
Copy after login

This code removes an element from the "friends" slice within the "Guest" struct. However, attempting to remove an element from the original struct results in overwriting the desired element and multiplying the last element, as seen in the example:

guest1.friends = [1, 2, 3, 4, 5]
guest1.removeFriend(3)
// Result: guest1.friends = [1, 2, 4, 5, 5]
Copy after login

To rectify this issue, you must use a pointer receiver:

func (self *Guest) removeFriend(id int) {
    // ... (Same implementation)
}
Copy after login

By using a pointer receiver, you assign the new slice value (returned by "append()") to the "friends" field of the original "Guest" struct, effectively reducing the slice length by 1.

Additionally, it's recommended to use a more idiomatic receiver name, such as "guest" or "g," instead of "self."

The above is the detailed content of How to Remove Elements from a Slice Within a Struct in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template