По какой-то причине я не могу выполнить итерацию с диапазоном
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)
}
}
sessionStore
type
это 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
и проверить, не пусто ли оно, когда вы просматриваете его?
Основываясь на том, что показано и что вы описываете, может показаться, что когда этот for
выполняется, sessionStore
пуст.
Я вижу, что ваша логика сохранения ошибочна, и я подозреваю, что вы не можете повторить карту, потому что она фактически пуста.
Здесь
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(),
//....
}
Можете ли вы предоставить минимальный воспроизводимый пример ? Вы читали пример кода с использованием итерации? Как новый пользователь здесь, также пройдите тур и прочитайте Как спросить.