Как изменить значение свойства вложенной структуры - PullRequest
0 голосов
/ 21 ноября 2019

Я пытаюсь изменить значение переменной вложенной структуры в 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
}
...