Go 如何在接收器方法中使用自定义类型的切片

Go 如何在接收器方法中使用自定义类型的切片,go,types,slice,Go,Types,Slice,我是Golang的新手,我知道应该通过引用而不是值来调用接收方方法。但奇怪的是,在命名了一个切片类型之后,这就不起作用了 我将一组进程命名为Group,其中Process是任何内容的结构 type Group []Process A组有一组相关的方法,我通常通过receiver方法使用它们。这个Search函数只是一个简单的示例 func (G *Group) Search(addr string) (*Process, error) { for _, ps := range *G

我是Golang的新手,我知道应该通过引用而不是值来调用接收方方法。但奇怪的是,在命名了一个切片类型之后,这就不起作用了

我将一组进程命名为
Group
,其中
Process
是任何内容的结构

type Group []Process
A
有一组相关的方法,我通常通过receiver方法使用它们。这个
Search
函数只是一个简单的示例

func (G *Group) Search(addr string) (*Process, error) {

    for _, ps := range *G {

        if ps.Address == addr {

            return &ps, nil
        }
    }
    return nil, errors.New("Group: Address Not found")
}
然后我打电话过去

p, err := group.Search(address)
p可以正常改变。但是这些变化只影响p(它实际上并不指向
中的slice元素),而不是
中的slice元素


问题:如何在接收器方法中使用自定义类型的切片。

如何将切片类型用作接收器没有问题。循环和返回指针的方式有问题。改变

for _, ps := range *G {
    if ps.Address == addr {
        return &ps, nil
    }
}
进入


它应该可以工作-您将返回一个指向切片的指针,而不是指向局部变量的指针。

如何使用切片类型作为接收器没有问题。循环和返回指针的方式有问题。改变

for _, ps := range *G {
    if ps.Address == addr {
        return &ps, nil
    }
}
进入


它应该可以工作-您将返回指向切片的指针,而不是指向局部变量的指针。

返回指向切片元素的指针:
对于i,ps:=range*G{if ps.Address==addr{Return&(*G)[i]}
返回指向切片元素的指针:
对于i,ps:=range*G{if ps.Address==addr{Return&(*G)[i]}