可以向切片添加 append 方法

xaa*_*aav 3 arrays go

我有类似下面的类型结构:

type Set []*Element

func (set *Set) AppendElements(elements []*Elements) {
    // ?
}
Run Code Online (Sandbox Code Playgroud)

显然,简单地将元素附加到切片并不是很有用。然而,实际的函数需要一些值,执行一些业务逻辑,然后附加元素。但是,我面临的困难是修改方法内部的切片实际上不会将切片的值更改为外部调用者,因为 append 方法分配了调用者看不到的新切片。

有没有办法在方法中附加到切片,还是应该将切片包装在结构或其他东西中?

package main

import "fmt"

type Element int
type Set []*Element

func (ptr *Set) AppendElements(elements []*Element) {
    set := *ptr
    set = append(set, elements...)
}

func main() {
    i := Element(1)
    var set Set
    set.AppendElements([]*Element{&i})

    for _, el := range set {
        fmt.Println(el)
    }
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,上面没有打印任何内容。

Jim*_*imB 7

您正在修改切片,但从未将其分配回指针。

func (ptr *Set) AppendElements(elements []*Element) {
    set := *ptr
    set = append(set, elements...)
    *ptr = set
}
Run Code Online (Sandbox Code Playgroud)

通常,人们会直接在append语句中取消引用指针:

func (set *Set) AppendElements(elements []*Element) {
    *set = append(*set, elements...)
}
Run Code Online (Sandbox Code Playgroud)