
函数是应用程序开发中极度常见的组成部分,而不少的我们往往需要向函数传递数组作为参数,以对数据进行处理。常见的应用领域为:
- 排序
- 展示列表
- 数据分析
如果要将一维数组作为函数的参数传递,则我们必须以下面两种方式之一声明函数形式参数(两种声明方法都会产生相似的结果)。我们也可以类似的方式将多维数组作为形式参数传递。
不过以下方法有着本质区别:
[]int和[5]int这两种表达方式在 Go 语言里有根本性的区别。[]int不是数组,而是数组切片(slice),而[5]int是一个数组。在 Go 语言中,数组是值类型,而数组切片是引用类型。值类型变量在函数调用时的参数传递中会被完整拷贝一次变量内容,之后函数内操作的只是这个拷贝的副本。一般而言,参数类型会选择数组切片而非数组,以避免拷贝所导致的性能损耗。
方法一 —— 数组
形参为固定尺寸的数组,如下:
void myFunction(param [10]int) {
// ……
}
复制代码
方法二 —— 数组切片
形参为非固定尺寸的的数组切片,如下:
void myFunction(param []int) {
// ……
}
复制代码
例子
抛出一个例子叭:求一组整数数组的各项平均值。
func getAverage(arr []float32) float32 {
var sum, avg float32
l := len(arr)
for i := 0; i < l; i++ {
sum += arr[i]
}
avg = sum / float32(l)
return avg
}
复制代码
拿着上一篇文章的遗产 —— 数字生成器测试了一下效果:
当然也可以写一段自动生成数据测试的代码,经检验,10w 级别数据 2.67s,100w 级数据 312.33s:
func main() {
var arr []float32
for i := 0; i < 100000; i++ {
arr = append(arr, float32(rand.Intn(100000))/rand.Float32())
}
fmt.Println(getAverage(arr))
}
复制代码
输出如下:
572976.3
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END




















![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)