Почему этот код сеанса гориллы не работает?

Я новичок в Golang, поэтому я делаю свое первое игрушечное приложение, настроив начальный проект для веб-приложения на основе гориллы. Все идет хорошо, но код сеанса работает не так, как я ожидал, вот полный код, а вот только соответствующий фрагмент:

func getMyCounter(w http.ResponseWriter, r *http.Request){
    session, _ := sessionStore.Get(r, counterSession)
    if session.IsNew {
        session.Values[myCounter] = 0
    }
    val := session.Values[myCounter].(int)
    log.Printf("getMyCounter %d", val)
    m := make(map[string]int)
    m["counter"] = val
    js, _ := json.Marshal(m)
    w.Header().Set("Content-Type", "application/json")
    w.Write(js)
}

func incrementMyCounter(w http.ResponseWriter, r *http.Request){
    log.Println("incrementMyCounter")
    session, _ := sessionStore.Get(r, counterSession)
    if session.IsNew {
        session.Values[myCounter] = 0
    }
    val := session.Values[myCounter].(int)
    session.Values[myCounter] = val + 1
    getMyCounter(w, r)
}

мои вызовы getMyCounter и incrementMyCounter всегда возвращают 0


person Daniel Robinson    schedule 10.03.2015    source источник
comment
ты не звонишь session.Save(r, w)   -  person JimB    schedule 10.03.2015
comment
.... Ну, это неудобно. Благодарность :)   -  person Daniel Robinson    schedule 10.03.2015


Ответы (1)


спасибо JimB за указание на до боли очевидное, мне нужно было добавить вызов session.Save(r, w) после создания/редактирования сеанса.

person Daniel Robinson    schedule 10.03.2015
comment
Просто добавьте к этому: если у вас есть какой-либо поток управления (например, вы возвращаетесь раньше), вам нужно вызвать session.Save(r, w), прежде чем вы: а) покинете обработчик и/или б) напишите в ResponseWriter. - person elithrar; 11.03.2015