如何在 Receiver 方法中使用自定义类型的 Slice

How to use a custom type of Slice in a Receiver Method

我是 Golang 的新手,我知道 Receiver Method 应该通过引用而不是通过值来调用。但奇怪的是,命名切片类型后,这不起作用!!

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

type Group []Process

A Group 有一组相关的方法,我通常通过接收器方法使用它们。此 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(它并不是真正指向 Group 的切片元素),而不是 Group.

中的切片元素

问题:如何在 Receiver 方法中使用自定义类型的 Slice。

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

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

进入

for i, ps := range *G {
    if ps.Address == addr {
        return &(*G)[i], nil
    }
}

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