猿问

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

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

我可以让它与Marshaland 一起工作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}


森林海
浏览 73回答 1
1回答

跃然一笑

您可以使用解引用运算符为指针赋值*o = members[i]所以,在你的情况下:func (o *Tmp) FindID(id int) bool {&nbsp; &nbsp; for i := range members {&nbsp; &nbsp; &nbsp; &nbsp; if members[i].ID == id {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *o := members[i]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return false}我冒昧地让函数指示(通过返回值)它是否真的找到了任何东西;当然,您可以忽略该更改。
随时随地看视频慕课网APP

相关分类

Go
我要回答