【问题标题】:in golang what does the [:] syntax differ from the array assignment?在 golang 中,[:] 语法与数组赋值有什么不同?
【发布时间】:2021-03-20 11:23:52
【问题描述】:

我目前正在阅读 GoLang 教程并有以下疑问。

arr1:=[...]int{1,2,3}
arr2:=arr1
arr1[1]=99
fmt.Println(arr1)
fmt.Println(arr2)

它输出以下语句

[1 99 3]
[1 2 3]

这里只修改了数组 a,这是有意义的,因为数组被视为值。

如果我尝试跟随事情变得混乱

a:=[...]int{1,2,3}
b:=a[:]
a[1]=88
fmt.Println(a)
fmt.Println(b)

这会导致打印

[1 88 3]
[1 88 3]

问题:这是否意味着说 b:=a 创建数组的副本,而说 b:=a[:] 将创建一个指向底层数组(在本例中为“a”)的切片?

【问题讨论】:

标签: arrays go slice


【解决方案1】:

切片不会复制切片的数据。它创建一个新的切片值 指向原始数组。这使得切片操作为 有效地操作数组索引。因此,修改 重新切片的元素(不是切片本身)修改 原始切片

https://blog.golang.org/slices-intro

检查上面的链接以了解 Slice 背后的内部结构

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    相关资源
    最近更新 更多