【问题标题】:Multidimensional Slices in GoGo 中的多维切片
【发布时间】:2014-01-31 03:08:07
【问题描述】:

我想在 Go 中有一个数组/切片,其中包含可变数量的元素(在编译时未知),并且能够动态添加不同类型的新元素,例如:

data[0] := "string"
data[1] // slice 
data[1][0] := "another string"
data[1][1] := 42 // int 

这有可能吗?

【问题讨论】:

    标签: arrays multidimensional-array go slice


    【解决方案1】:

    这有点难看,但可以使用空接口,interface{}

    package main
    
    import "fmt"
    
    func main() {
    
        variadic := []interface{}{}
    
        variadic = append(variadic, "foo")
        variadic = append(variadic, []interface{}{"bar", 42})
    
    //this will print "foo"
        fmt.Println(variadic[0])
    
        //note that you have to cast variadic[1] to an array before accessing it
        fmt.Println(variadic[1].([]interface{})[0])
    
    }
    

    如果你允许假设每个元素必须是一个长度可变的数组,那么它就不那么难看了:

    package main
    
    import "fmt"
    
    func main() {
    
            variadic := [][]interface{}{}
    
            variadic = append(variadic, []interface{}{"foo"})
            variadic = append(variadic, []interface{}{"bar", 42})
    
    
            fmt.Println(variadic[0])
            fmt.Println(variadic[1][0])
            fmt.Println(variadic[1][1])
    
        }
    

    【讨论】:

    • 确实很丑,但我想它可以完成工作。谢谢!
    • 第二个例子只有在处理二维时才好,否则也会变得丑陋:play.golang.org/p/Is2Av34sUs
    猜你喜欢
    • 2018-09-04
    • 2022-01-22
    • 2020-03-11
    • 2016-05-12
    • 1970-01-01
    • 2017-11-02
    • 2018-01-09
    • 2020-05-03
    • 2021-11-23
    相关资源
    最近更新 更多