去lang数组和切片数据types
我是Go语言的新手。 我发现自己与array
和slice
数据types混淆。
从Go文档中,数组描述如下:
Go和C中数组的工作方式有很大的不同。在Go中,
- 数组是值。 将一个数组分配给另一个数组复制所有元素。
- 尤其是,如果将一个数组传递给一个函数,它将会收到一个数组的副本,而不是指向它的指针。
- 数组的大小是其types的一部分。 types[10] int和[20] int是不同的。
function:
和C系列中的所有语言一样,Go中的所有东西都是有价值的。 也就是说,一个函数总是获得被传递的东西的副本,就像有一个赋值语句赋值给参数一样。 例如,将一个int值传递给一个函数会生成一个int的副本,并且传递一个指针值会创build指针的副本,但不会指向它所指向的数据。
为什么sort.Ints(arrayValue)
修改传递的variables时,我宣布它作为一个数组,而不是一个切片?
码
var av = []int{1,5,2,3,7} fmt.Println(av) sort.Ints(av) fmt.Println(av) return
产量
[1 5 2 3 7] [1 2 3 5 7]
请参阅“ 切片:使用和内部 ”
var av = []int{1,5,2,3,7}
这是一个切片,而不是一个数组。
切片文字被声明为一个数组文字,除了省略元素数。
这就解释了为什么sortingfunction会修改切片引用的内容 。
正如Kirk sort.Ints
, sort.Ints
会给你一个错误,如果你传递一个数组而不是一个slice。
func Ints(a []int)
因为你正在使用一个切片,而不是一个数组。
这是一个切片:
var av = []int{1,5,2,3,7}
那些是数组:
var av = [...]int{1,5,2,3,7} var bv = [5]int{1,5,2,3,7}
如果你尝试编译:
var av = [...]int{1,5,2,3,7} fmt.Println(av) sort.Ints(av) fmt.Println(av)
,你会得到一个错误:
在函数参数中不能使用av(type [5] int)作为type [] int
作为sort.Ints期望收到一个切片[] INT 。
[]int{1,5,2,3,7}
不是一个数组。 一个数组有它的长度,如[5]int{1,5,2,3,7}
。
制作切片的副本并对其进行sorting:
a := []int{1,5,2,3,7} sortedA := make([]int, len(a)) copy(sortedA, a) sort.Ints(sortedA) fmt.Println(a) fmt.Println(sortedA)
var av = []int{1,5,2,3,7}
在上面的语句中,你正在像一个数组初始化切片
创build一个数组的语法应该是
var av = [5]int{1,5,2,3,7}
- 为什么PDFKit / wkhtmltopdf挂起,但如果Rails应用程序被杀死,则按预期呈现PDF?
- 错误检查是否在Android中启用了蓝牙(REQUEST_ENABLE_BT无法parsing为variables)