arrays – 接受任意大小的数组作为参数的函数(在Golang中是否可
问:在golang中,有没有办法定义一个接受任意长度数组作为参数的函数?
例如., function demoArrayMagic(arr [magic]int){ .... } 我已经理解在golang中,数组长度是变量类型的一部分,因此以下函数不会接受一个任意数组作为输入 function demoArray(arr [2]int){ .... } 这个函数不会用arrInput [6] int作为输入编译 – 即,demoArray(arrInput)将无法编译. 此外,接受slice参数的以下函数不接受数组作为参数(不同类型,如预期的那样): function demoSlice(arr []int){ .... } 即,demoSlice(arrInput)不编译,期望切片不是数组. 问题是,有没有办法定义一个采用任意长度数组的函数(数组,非切片)?它看起来很奇怪并限制了一种语言强加这种约束. 这个问题与动机无关,但在我看来,背后的原因如下.我有一组函数,它们将[] [] int作为参数数据结构. 问候 P.s:我现在提醒Go,传递/使用“按值”的东西,使用数组可能是过度杀伤因为golang会复制很多次.我想我会留下切片,我会尝试了解一下GOB的内部结构. 解决方法
那没有. Go不支持泛型.
唯一的方法是使用接口{},但这将允许传递任何类型的值,而不仅仅是所需类型的数组. Go中的数组是“次要的”.解决方案是根据您的要求使用切片. 这里要注意的一件事是你可以继续使用数组,只有当你想将它们传递给这个函数时才切片,例如: func main() { a1 := [1]int{1} demo(a1[:]) a2 := [2]int{1,2} demo(a2[:]) } func demo(s []int) { fmt.Println("Passed:",s) } 以上输出(在Go Playground上试试): Passed: [1] Passed: [1 2] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |