Go 如何在接收器方法中使用自定义类型的切片
我是Golang的新手,我知道应该通过引用而不是值来调用接收方方法。但奇怪的是,在命名了一个切片类型之后,这就不起作用了 我将一组进程命名为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
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]}