Как сохранить сеанс в Голанге

Одна особенность неизменяемых классов, которые еще не были вызваны: сохранение ссылки на объект с неизменяемым классом является эффективным средством хранения всего содержащегося в нем состояния. Предположим, что у меня есть изменяемый объект, который использует глубоко неизменный объект для хранения информации о состоянии на 50 КБ. Предположим, далее, что я хочу в 25 случаях сделать «копию» моего исходного (изменяемого) объекта (например, для «отменить»); состояние может меняться между операциями копирования, но обычно этого не происходит. Создание «копии» изменяемого объекта просто потребовало бы копирования ссылки на его неизменяемое состояние, поэтому 20 экземпляров просто составят 20 ссылок. В отличие от этого, если бы государство было размещено на 50 тыс. Измененных объектов, каждая из 25 операций копирования должна была создать свою собственную копию данных на 50 тыс. для хранения всех 25 экземпляров потребовалось бы хранить большую сумму дублированных данных. Несмотря на то, что первая операция копирования создаст копию данных, которые никогда не будут меняться, а остальные 24 операции могут теоретически просто ссылаться на это, в большинстве реализаций не было бы способа, чтобы второй объект запрашивал копию чтобы узнать, что неизменяемая копия уже существует (*).

(*) Один шаблон, который иногда может быть полезен, заключается в том, что изменяемые объекты имеют два поля для хранения своего состояния: одно в изменяемой форме и одно в неизменной форме. Объекты могут быть скопированы как изменчивые или неизменные и начнут жизнь с одного или другого набора ссылок. Как только объект хочет изменить свое состояние, он копирует неизменяемую ссылку на изменяемую (если она еще не была сделана) и делает недействительной неизменяемую. Когда объект копируется как неизменяемый, если его неизменяемая ссылка не задана, будет создана неизменяемая копия, и на нее будет ссылаться неизменная ссылка. Этот подход потребует еще нескольких операций копирования, чем «полноценная копия при записи» (например, запрос на копирование объекта, который был мутирован, поскольку для последней копии требуется операция копирования, даже если исходный объект больше не мутируется ), но это позволяет избежать сложностей потоков, которые повлечет FFCOW.

-1
задан Eli Bendersky 18 January 2019 в 15:28
поделиться

1 ответ

// watch this line
if auth, ok := storeAuth.Values["loggedID"].(bool); ok && auth {

storeAuth.Values["loggedID"] не bool, поэтому ok - false, тогда вы получите «ничего не найдено»

Измените на

    if auth, ok := storeAuth.Values["loggedID"]; ok{
        return auth.(int)
    }
    fmt.Println("none found")
0
ответ дан Billy Yuan 18 January 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: