在Go中存储和迭代命名嵌套数据结构的惯用方法?

时间:2016-01-11 03:19:02

标签: data-structures go iterator idiomatic

我的问题分为两个:(1)在下面的taskList中存储数据的最佳方法是什么,以及(2)迭代这种结构的最佳方法是什么?

我想要task1命名,因为它们是唯一的任务,不应该有ID冲突。我希望单独命名为subtask0,因为它们是具有不同要求的独特任务。

下面是我的意图的伪Go表示:

package main

import "fmt"

fn main() {
    const taskList := {
        "task1": {
            "subtask0": "api.example.com/stuff/"
            "subtask1": "api.example.com/stuff/"
            "subtask2": "api.example.com/stuff/"
        }
        "task2": { 
            "subtask0": "api.example.com/stuff/"
            "subtask1": "api.example.com/stuff/"
            "subtask2": "api.example.com/stuff/"
        }
    }

    for i := range taskList {
        for j := range taskList[i] {
            fmt.Printf("%s\n", taskList[i][j])
        }
    }
}

我已经尝试过struct,但是我很难迭代结构。我想避免map,因为Go不允许我将其存储在const

1 个答案:

答案 0 :(得分:1)

基于我在你的伪代码中看到的内容,并根据我从评论中听到的内容,我会选择结构片段:

所以我要定义一个结构:

type subtask struct {
    name string
    kind int
}

其中name将是您的api.example.com/stuff/,而kind将是您的子任务类型:

  

我将以不同的方式对待它们(某些API需要不同   头)

然后你的清单看起来像这样:

list := [][]subtask{
    []subtask{subtask{"example1", 1}, subtask{"example2", 1}},
    []subtask{subtask{"example3", 1}, subtask{"example4", 2}},
}

完全有效的例子就在这里 Playground