我有一个结构体数组和一个用于在该数组中查找具有给定ID的结构体的方法。如果存在,我想将其复制到结构本身。 但是我无法使其正常工作。
我可以使其与Marshal
和Unmarshal
一起使用,但是我认为这不是一个好的解决方案。
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}
答案 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
}
我冒昧地让该函数(通过返回值)指示它是否实际找到了任何东西;当然,您可以忽略该更改。