2017-06-19 51 views
-1

我有类似下面下列类型结构:可能追加方法添加到切片

type Set []*Element 

func (set *Set) AppendElements(elements []*Elements) { 
    // ? 
} 

显然只是附加元素,片是不是非常有用。然而,实际的功能需要一些价值,做一些业务逻辑,然后追加元素。然而,我面临的困难是对方法内部的slice进行修改,以便实际上不会将片的值更改为外部调用者,因为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) 
    } 
} 

更具体地说,上面不打印任何东西。

+0

你有一个'* Set'指针,这样你就可以修改它。这将有助于说明你如何管理,而不是修改它。 – JimB

+0

@JimB追加函数不适用于指针。一个可运行的示例已发布。 – xaav

回答

3

您正在修改切片,但您永远不会将其分配回指针。

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

通常不过,一会直接取消引用指针在append声明:

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

谢谢你的回答,请原谅我的无能,因为我没有太多的C语言风格的经验。 – xaav