go语言数组是引用类型吗为什么不一样

Go语言数组是引用类型吗?

在Go语言中,数组被看作是一种值类型。这意味着数组变量本身在分配到内存中时,是按值传递的。例如:

    var arr1[5]int = [5]int {1, 2, 3, 4, 5} 
    var arr2[5]int = arr1 // 在这里,arr1数组将按值传递给arr2数组
    arr2[0] = 7 // 修改arr2[0]
    fmt.Println(arr1[0], arr2[0]) // 输出 1 7

可以看到,当一个数组变量被分配变量值时,它实际上已经被复制到了目标位置。我们可以在数组 arr2 变量中修改值,而这不会影响数组 arr1 变量。这就是数组是值类型的例子。

数组变量本身既是复制的

在Go语言中,数组变量本身是不会改变的。所以,当一个数组变量被传递给一个函数时,被调用的函数将得到原始数组的一个副本。例如:

    func changeArray(arr [5]int){
        arr[0] = 7
        fmt.Println("new array: ",arr)
    }
    var arr [5]int = [5]int {1,2,3,4,5}
    changeArray(arr) // 这里将数组值传递给方法
    fmt.Printf("origin array: ", arr) // 结果是 [1,2,3,4,5]

在这个例子中,我们创建了一个名为 `changeArray` 的函数,他将接收原来的数组作为其参数,并且在方法中修改其第一个元素的值。当我们在主程序中调用该函数时,原来的数组仍然保持不变。

数组长度是类型的一部分,因此不能更改

最重要的一点是数组长度是类型的一部分。这意味着一个数组在声明时就必须指定其长度,而这个长度不能在数组生命周期中更改。例如:

    var arr1 [5]int // 声明包含5个整数的数组
    var arr2 [10]int // 声明包含10个整数的数组
    arr1 = arr2 // 这将会失败,因为它们是两种不同长度类型

在这个例子中,尽管这两个数组都是整数数组,但它们的长度不同。在 Go 语言中,你不能将一个数组赋值到另一个长度不同的数组。如果你尝试这样做,Go 编译器将会抛出一个错误。

总之,虽然Go语言中的数组本身被视为值类型,但这并不意味着它们是不可变的。Go 语言中的数组一旦创建就不能更改其长度。因此,在编写代码时,你需要非常小心处理数组类型。

本文来自投稿,不代表亲测学习网立场,如若转载,请注明出处:https://www.qince.net/golang-zte8.html

郑重声明:

本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。

我们不承担任何技术及版权问题,且不对任何资源负法律责任。

如遇到资源无法下载,请点击这里失效报错。失效报错提交后记得查看你的留言信息,24小时之内反馈信息。

如有侵犯您的版权,请给我们私信,我们会尽快处理,并诚恳的向你道歉!

(0)
上一篇 2023年5月2日 上午4:51
下一篇 2023年5月2日 上午4:51

猜你喜欢