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

时间:2019-01-10 03:56:07

标签: pointers go

我有一个结构体数组和一个用于在该数组中查找具有给定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}

1 个答案:

答案 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
}

我冒昧地让该函数(通过返回值)指示它是否实际找到了任何东西;当然,您可以忽略该更改。