go语言中数组使用的注意事项和细节1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的 , 不能动态变化。
2、var arr []int这时arr就是一个slice 切片。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型 , 但是 不能混用。
4、数组创建后,如果没有赋值 , 有默认值如下:
数值类型数组:默认值为 0
字符串数组:默认值为 ""
bool数组:默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的 。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递,因此会进行值拷贝 。数组间不会相互影响 。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式) 。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度 , 看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确 , 因为[3]int类型传给[3]int类型合法 。
go语言函数如何传递数组变量按值传递函数参数,是拷贝参数的实际值到函数的形式参数的方法调用 。在这种情况下,参数在函数内变化对参数不会有影响 。
默认情况下,Go编程语言使用调用通过值的方法来传递参数 。在一般情况下,这意味着,在函数内码不能改变用来调用所述函数的参数 。考虑函数swap()的定义如下 。
代码如下:
/* function definition to swap the values */
func swap(int x, int y) int {
var temp int
temp = x /* save the value of x */
x = y/* put y into x */
y = temp /* put temp into y */
return temp;
}
现在,让我们通过使实际值作为在以下示例调用函数swap():
代码如下:
package main
import "fmt"
func main() {
/* local variable definition */
var a int = 100
var b int = 200
fmt.Printf("Before swap, value of a : %d\n", a )
fmt.Printf("Before swap, value of b : %d\n", b )
/* calling a function to swap the values */
swap(a, b)
fmt.Printf("After swap, value of a : %d\n", a )
fmt.Printf("After swap, value of b : %d\n", b )
}
func swap(x, y int) int {
var temp int
temp = x /* save the value of x */
x = y/* put y into x */
y = temp /* put temp into y */
return temp;
}
让我们把上面的代码放在一个C文件 , 编译并执行它,它会产生以下结果:
【go语言函数数组 go语言函数式编程】Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200
这表明,参数值没有被改变,虽然它们已经在函数内部改变 。
通过传递函数参数 , 即是拷贝参数的地址到形式参数的参考方法调用 。在函数内部,地址是访问调用中使用的实际参数 。这意味着,对参数的更改会影响传递的参数 。
要通过引用传递的值,参数的指针被传递给函数就像任何其他的值 。所以,相应的 , 需要声明函数的参数为指针类型如下面的函数swap(),它的交换两个整型变量的值指向它的参数 。
代码如下:
/* function definition to swap the values */
func swap(x *int, y *int) {
var temp int
temp = *x/* save the value at address x */
推荐阅读
- 白天能拍摄什么,白天拍的照片叫什么
- 电视桌面模式是什么,电视机桌面
- 有没有靠谱的棋牌游戏的简单介绍
- linux定时操作命令 linux定时指令
- jquery里each,JQuery怎么读
- redis集群怎么关机,redis集群关闭命令
- 微信多群直播语音定制机,微信直播怎么开语音直播
- go语言with风格 go 语言defer
- jquery图片导出,jquery导出word