arrays – 接受任意大小的数组作为参数的函数(在Golang中是否可以?)

arrays – 接受任意大小的数组作为参数的函数(在Golang中是否可以?),第1张

概述问:在golang中,有没有办法定义一个接受任意长度数组作为参数的函数? 例如., function demoArrayMagic(arr [magic]int){....} 我已经理解在golang中,数组长度是变量类型的一部分,因此以下函数不会接受一个任意数组作为输入 function demoArray(arr [2]int){....} 这个函数不会用arrInput [6] in 问:在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作为参数数据结构.
我注意到它们的GOB序列化比我拥有的其他数据结构慢10倍(MB / s).我想这可能与切片中的derefencing *** 作链有关.从切片移动到数组 – 即,定义[10000] [128] 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]
总结

以上是内存溢出为你收集整理的arrays – 接受任意大小的数组作为参数的函数(在Golang中是否可以?)全部内容,希望文章能够帮你解决arrays – 接受任意大小的数组作为参数的函数(在Golang中是否可以?)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1264987.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-08
下一篇2022-06-08

发表评论

登录后才能评论

评论列表(0条)

    保存