我发现自己很困惑array
and slice
数据类型。
从 Go 文档来看,数组的描述如下:
数组在 Go 和 C 中的工作方式存在重大差异。在 Go 中,
- 数组是值。将一个数组分配给另一个数组会复制所有元素。
- 特别是,如果将数组传递给函数,它将收到该数组的副本,而不是指向它的指针。
- 数组的大小是其类型的一部分。类型 [10]int 和 [20]int 是不同的。
功能:
与 C 家族中的所有语言一样,Go 中的所有内容都被传递
价值。也就是说,一个函数总是获取该事物的副本
通过,就像有一个赋值语句赋值一样
到参数。例如,将 int 值传递给函数
制作 int 的副本,并传递指针值制作 a 的副本
指针,但不是它指向的数据。
为什么sort.Ints(arrayValue)
当我将传递的变量声明为数组而不是切片时修改它吗?
Code
var av = []int{1,5,2,3,7}
fmt.Println(av)
sort.Ints(av)
fmt.Println(av)
return
Output
[1 5 2 3 7]
[1 2 3 5 7]
See "切片:用法和内部结构 http://golang.org/doc/articles/slices_usage_and_internals.html"
var av = []int{1,5,2,3,7}
那是一个切片,而不是一个数组。
切片文字的声明方式与数组文字类似,只是省略了元素计数。
这就解释了为什么排序函数会修改content切片所引用的内容。
正如下面评论者Kirk https://stackoverflow.com/users/1236394/kirk, sort.Ints https://golang.org/pkg/sort/#Ints如果您向其传递数组而不是切片,则会出现错误。
func Ints(a []int)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)