亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修改嵌套結構的屬性值

如何修改嵌套結構的屬性值

Go
慕娘9325324 2023-08-07 11:14:39
我正在嘗試修改 Go 中嵌套結構變量的值。基本上,我想修改RsvpString屬性,但GetRsvp()似乎返回值Rsvp而不是引用,因此當我修改其屬性值時,它不會反映在實例中Event。測試如下。type Event struct {    Rsvps     []Rsvp `json:"rsvps"`}type Rsvp struct {    UserId          string `json:"userId"`    RsvpString      string `json:"rsvp"`}func (e *Event) GetRsvp(userId string) (rsvp *Rsvp, err error) {    for _, element := range e.Rsvps {        if element.UserId == userId {            return &element, nil        }    }    return &Rsvp{}, fmt.Errorf("could not find RSVP based on UserID")}func (e *Event) UpdateExistingRsvp(userId string, rsvpString string) {    rsvp, err := e.GetRsvp(userId)    if err == nil {        rsvp.RsvpString = rsvpString    }}這是測試代碼:func TestEvent_UpdateExistingRsvp(t *testing.T) {    e := Event{[]Rsvp{        {Name:      "Bill",            UserId:    "bill",            Rsvp:      "yes"}}}    e.UpdateExistingRsvp("bill", "no")    assert.Equal(t, "no", e.Rsvps[0].Rsvp, "RSVP should be switched to no") // fails}
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

GetRsvp返回循環變量的地址,而不是數組中元素的地址。修理:


    for i, element := range e.Rsvps {

        if element.UserId == userId {

            return &e.Rsvps[i], nil

        }

    }

循環變量保留 e.Rsvps[i] 的副本,并且它在每次迭代時都會被覆蓋。如果返回循環變量的地址,則返回該副本的地址。


查看完整回答
反對 回復 2023-08-07
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

當范圍覆蓋切片時,每次迭代都會返回兩個值。第一個是索引,第二個是該索引處元素的副本。


因此從技術上講,您正在嘗試修改 Rsvp 的副本。相反,從 GetRsvp() 方法返回索引并更新。


func (e *Event) GetRsvp(userId string) (int, error) {

    for index , element := range e.Rsvps {

        if element.UserId == userId {

            return index, nil

        }

    }

    return -1 , fmt.Errorf("could not find RSVP based on UserID")

}


func (e *Event) UpdateExistingRsvp(userId string, rsvpString string) {

    index, err := e.GetRsvp(userId)


    if err != nil || index == -1  {

        fmt.Println("no such user")

    }

    e.Rsvps[index].RsvpString = rsvpString

}


查看完整回答
反對 回復 2023-08-07
  • 2 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號