登录
首页 >  Golang >  Go问答

在golang中无法使用range进行迭代

来源:stackoverflow

时间:2024-02-21 15:00:27 356浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《在golang中无法使用range进行迭代》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过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)
    }
}

sessionstoretypefilesystemstore

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)
}

我可以将 readwrite 数据写入 sessionstore 但无法迭代它。 当我调用 lssessionscommand() 输出时,我得到 id 存储时间 它只是永远不会到达范围函数的主体。

我首先调用了stashsession函数,然后调用了lssessionscommand函数


解决方案


我发现你的保存逻辑有问题,我怀疑你无法迭代地图,因为它实际上是空的。

这里

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(),
    //....
}

本篇关于《在golang中无法使用range进行迭代》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>