如何在 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
}
}
它应该可以工作 — 您将返回一个指向切片的指针,而不是指向局部变量的指针。
我是 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
}
}
它应该可以工作 — 您将返回一个指向切片的指针,而不是指向局部变量的指针。