Не могу использовать диапазон в golang

По какой-то причине я не могу выполнить итерацию с диапазоном

var sessionStore = make(FileSystemStore)
func LsSessionsCommand(_ []string, _ *string, _ *memory.FileSystem){
    w := tabwriter.NewWriter(os.Stdout, 1, 1, 1, ' ', 0)
    fmt.Fprint(w, "id\tstored time\n")
    
    for key, val := range sessionStore {
        // never reaches here
        t := time.Unix(val.Stored, 0)
        createdTime := fmt.Sprintf("%d:%d %d/%d/%d", t.Hour(), t.Minute(), t.Day(), t.Month(), t.Year())
        _, err := fmt.Fprintf(w, "%s\t%s\n", key, createdTime)
        if err != nil {
            fmt.Printf("unable to list sessions: %v", err)
        }
    }
    err := w.Flush()
    if err != nil {
        fmt.Printf("unable to list sessions: %v", err)
    }
}

sessionStoretype это FileSystemStore

type FileSystemStore map[string]FileSystemStoreEntry

type FileSystemStoreEntry struct {
    FS FileSystem
    Stored int64
}

Добавление data к sessionStore

func StashSession(memfs memory.FileSystem, id string) {
    s := sessionStore[id]
    s.FS = memfs
    s.Stored = time.Now().Unix()

    memfs.ReplaceFS(memory.CreateMemoryFileSystem().MFileSystem)
}

Чтение data

func CollectSession(memfs memory.FileSystem, id string, stashCurrent bool, newid string) {
    s := sessionStore[id]
    fs := s.FS.MFileSystem
    if stashCurrent {
        s.FS = memfs
    }
    memfs.ReplaceFS(fs)
}

Я могу read и write данные в sessionStore, но не могу перебирать их. Когда я вызываю LsSessionsCommand() Результат, который я получаю id stored time он просто никогда не достигает тела функции диапазона.

Сначала я вызвал функцию StashSession, затем функцию LsSessionsCommand

Когда вы говорите, что «не можете выполнять итерацию с диапазоном», что это значит? Что происходит? Кроме того, можете ли вы показать объявление sessionStore и проверить, не пусто ли оно, когда вы просматриваете его?

Adrian 24.12.2020 15:30

Основываясь на том, что показано и что вы описываете, может показаться, что когда этот for выполняется, sessionStore пуст.

Adrian 24.12.2020 16:12
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
3
3
182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу, что ваша логика сохранения ошибочна, и я подозреваю, что вы не можете повторить карту, потому что она фактически пуста.

Здесь

func StashSession(memfs memory.FileSystem, id string) {
    s := sessionStore[id]
    s.FS = memfs
    s.Stored = time.Now().Unix()
    //...
}

Вы не добавляете новый элемент на карту. Для этого вам необходимо:

sessionStore[id] = FileSystemStoreEntry{
    FS: memfs,
    Stored: time.Now().Unix(),
    //....
}

Другие вопросы по теме