List 如何在Go中表示变量嵌套列表

List 如何在Go中表示变量嵌套列表,list,go,nested-lists,List,Go,Nested Lists,如何创建一个列表,例如: {{1,2}, 3, {5, 6, 7}, 8, 9} 在围棋中代表?我需要能够将嵌套的变量大小列表从主函数传递到Go中的函数。然后,通过访问列表的各个元素/子列表,在函数内部处理该列表。 请注意,列表的大小和子列表的大小是可变的。您有两个基本选择: 首先,您可以制作一个切片: a := [][]int{ []int{1,2}, []int{3}, []int{5, 6, 7}, []int{8}, []int{9}, }

如何创建一个列表,例如:

{{1,2}, 3, {5, 6, 7}, 8, 9} 
在围棋中代表?我需要能够将嵌套的变量大小列表从主函数传递到Go中的函数。然后,通过访问列表的各个元素/子列表,在函数内部处理该列表。
请注意,列表的大小和子列表的大小是可变的。

您有两个基本选择:

首先,您可以制作一个切片:

a := [][]int{
    []int{1,2},
    []int{3},
    []int{5, 6, 7},
    []int{8},
    []int{9},
}
这不是你想要的,但很接近。在这种情况下,单个项目表示为包含一个项目的切片。简单

其次,您可以制作一个
接口{}
切片,并使用类型开关来标识和解压每个索引:

b := []interface{}{
    []int{1,2},
    3,
    []int{5, 6, 7},
    8,
    9,
}
这是更复杂的工作,但也更接近你想要的

从切片
b
读取项目的示例:

// Note that things can get a lot more complicated if you have
// more types and/or you nest deeper than one level.
for _, iv := range b {
    switch v := iv.(type) {
    case []int:
        // v is an int slice
    case int:
        // v is an int
    default:
        // This will probably be an error case.
    }
}

我建议你坚持第一种方法,除非你有很好的理由不这样做。

你有两个基本选择:

首先,您可以制作一个切片:

a := [][]int{
    []int{1,2},
    []int{3},
    []int{5, 6, 7},
    []int{8},
    []int{9},
}
这不是你想要的,但很接近。在这种情况下,单个项目表示为包含一个项目的切片。简单

其次,您可以制作一个
接口{}
切片,并使用类型开关来标识和解压每个索引:

b := []interface{}{
    []int{1,2},
    3,
    []int{5, 6, 7},
    8,
    9,
}
这是更复杂的工作,但也更接近你想要的

从切片
b
读取项目的示例:

// Note that things can get a lot more complicated if you have
// more types and/or you nest deeper than one level.
for _, iv := range b {
    switch v := iv.(type) {
    case []int:
        // v is an int slice
    case int:
        // v is an int
    default:
        // This will probably be an error case.
    }
}

我建议你坚持使用第一种方法,除非你有很好的理由不这样做。

Btw,
a:=[]int{{{1,2},{3},{5,6,7}
取决于你使用的是什么版本的go。安全总比抱歉好。1.0当然不会,但我不记得是什么时候添加的更改。我真的不希望有人声称支持GoV1.0。不,等等。我错了。Go 1.0增加了对切片中指针类型的支持,1.5增加了对贴图的支持。无论如何,它已经被支持了很长一段时间,我只是懒得去修改:PBtw,
a:=[]int{{{1,2},{3},{5,6,7}
取决于您使用的是什么版本的go。安全总比抱歉好。1.0当然不会,但我不记得是什么时候添加的更改。我真的不希望有人声称支持GoV1.0。不,等等。我错了。Go 1.0增加了对切片中指针类型的支持,1.5增加了对贴图的支持。无论如何,它已经被支持了很长一段时间,我只是懒得去改变:那些投票反对的请评论为什么。那些投票反对的请评论为什么。