首页 > 解决方案 > 如何制作可变类型切片

问题描述

我通过做一些我已经用其他语言完成的问题来学习围棋。

所以问题之一是: -

我试过制作一个接口类型数组,但这也没有用

func ProdSum(prods interface{},sum int ,depth int){
    for id,val:=range prods{
        if isArray(val){    
                ProdSum(val,sum,depth)
        }
    }

}
type arr []interface{}
func main(){
    arra:=arr{5,2,arr{7,-1},3,arr{6,arr{-13,8},4}}
    ProdSum(arra,0,1)
}
Error :

./prodsum.go:16:14: cannot range over prods (type interface {})

标签: go

解决方案


使用类型断言类型开关来确定一个值是切片还是整数。以下是使用类型开关的方法:

func sum(value interface{}) int {
    switch value := value.(type) {
    case arr:
        var result int
        for _, v := range value {
            result += sum(v)
        }
        return result
    case int:
        return value
    default:
        panic("type not handled")
    }
}

像这样称呼它:

a := arr{5, 2, arr{7, -1}, 3, arr{6, arr{-13, 8}, 4}}
n := sum(a)

在操场上运行它


推荐阅读