如何编写将数组成员分配给 self 的方法



我有一个结构数组和一个在该数组中查找具有给定ID的结构的方法。 如果存在,我想将其复制到结构本身中。但我无法让它工作。

我可以让它与MarshalUnmarshal一起使用,但我认为这不是一个好的解决方案。

https://play.golang.org/p/16giIQ0R1Hv

package main
import (
    "fmt"
)
type Tmp struct {
    ID  int
    Val int
}
var members []Tmp
func (o *Tmp) FindID(id int) {
    for i := range members {
        if members[i].ID == id {
            fmt.Println("found!")
            fmt.Println(members[i])
            tmp := members[i]
            o = &tmp
        }
    }
}
func main() {
    for i := 0; i < 5; i++ {
        o := Tmp{ID: i, Val: i * 2}
        members = append(members, o)
    }
    fmt.Println(members)
    a := Tmp{}
    a.FindID(3)
    fmt.Println(a)
}

这输出:

[{0 0} {1 2} {2 4} {3 6} {4 8}]
found!
{3 6}
{0 0}

可以使用取消引用运算符为指针赋值

*o = members[i]

因此,在您的情况下:

func (o *Tmp) FindID(id int) bool {
    for i := range members {
        if members[i].ID == id {
            *o := members[i]
            return true
        }
    }
    return false
}

我冒昧地让函数指示(通过返回值)它是否真的找到了任何东西;当然,你可以忽略这种变化。

最新更新