概念介绍
数组与切片
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。数组长度最大为2Gb,它是值类型。切片是对数组一个连续片段的引用,所以切片是一个引用类型。
按值传递和按引用传递
Go语言中函数的参数有两种传递方式,按值传递和按引用传递。Go默认使用按值传递来传递参数,也就是传递参数的副本。在函数中对副本的值进行更改操作时,不会影响到原来的变量。
按引用传递其实也可以称作”按值传递”,只不过该副本是一个地址的拷贝,通过它可以修改这个值所指向的地址上的值。
Go语言中,在函数调用时,引用类型(slice、map、interface、channel)都默认使用引用传递。
数组传递时的缺点
一般情况下,传递指针的消耗比传递副本的少,尤其是当数组特别大时。具体原因是:
如何避免
如上面介绍的,有两种方法,第一种利用指针,即引用传递;第二种使用切片,因为切片是引用类型,默认会使用引用传递。
使用指针进行传递
package main import "fmt" func main() { var arr = [5]int{1, 2, 3, 4, 5} fmt.Println(sum(&arr)) } func sum(arr *[5]int) int { s := 0 for i := 0; i < len(arr); i++ { s += arr[i] } return s }
使用切片进行传递
package main import "fmt" func main() { var arr = [5]int{1, 2, 3, 4, 5} fmt.Println(sum(arr[:])) } func sum(arr []int) int { s := 0 for i := 0; i < len(arr); i++ { s += arr[i] } return s }
最后一种方法通常比较常用。
参考文章
1. the way to go
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小牛知识库的支持。如果你想了解更多相关内容请查看下面相关链接
Go 语言中 值类型 有:int 系列、float 系列、bool、string、数组、结构体 值类型通常在栈中分配存储空间 值类型作为函数参数传递,是拷贝传递 在函数体内修改值类型参数,不会影响到函数外的值 package main import "fmt" func main() { num := 10 change(num) fmt.Println(num) // 10 }
问题内容: 在大多数语言(如c ++)中,传递数组会导致通过引用隐式传递它,因此对函数中传递的数组进行的任何更改都将导致更改原始数组。我正在学习Golang,在Alan AA Donovan和Brian W. Kernighan撰写的《 Go编程语言》一书中,它的行为不同于其他语言-不会隐式地通过引用传递数组。 这让我有些困惑-这是否意味着在没有引用的情况下传递数组不应该修改数组本身?让我说明一下
问题内容: 对不起这个基本问题。我想将一个切片作为参数传递给。像这样: 结果将是,但这显然不起作用。 (我要格式化的字符串比这要复杂的多,因此,简单的串联是不会做到的:) 所以问题是:如果我有数组,如何将其作为单独的参数传递给?或者:我可以调用在Go中传递参数列表的函数吗? 问题答案: 正如您在IRC上发现的那样,它将起作用: 您的原始代码无法正常工作,因为接受a 并且无法将其隐式或显式转换为该类
问题内容: 假设我有一个包含大量元素的javascript数组(50-200之间的任何位置)。 我想使用ajax将其发送到PHP(预备语句)。目前,我在循环中多次创建一个php文件,但我想将其转换为数组并发送一次数组,然后将PHP文件加载一次,而不是50-200次。 问题答案: 您可以使用JavaScript对数组进行编码,然后在PHP脚本中使用以对其进行检索。
本文向大家介绍JavaScript函数参数的传递方式详解,包括了JavaScript函数参数的传递方式详解的使用技巧和注意事项,需要的朋友参考一下 JavaScript使用一个变量对象来追踪变量的生存期。基本类型值被直接保存在变量对象内;而引用类型值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。 基本类型值的传递 向参数传递基本类型值时,被传递的值会被复制给一个局部变量(即
本文向大家介绍vue组件中使用props传递数据的实例详解,包括了vue组件中使用props传递数据的实例详解的使用技巧和注意事项,需要的朋友参考一下 在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递。父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息。看看它们是怎么工作的。 一、基本用法 组件不仅仅是要把模板的内容进行复用,更重要的是组件间要进行