-
繁星coding
实际上通过这样做:nums := []int{2, 3, 4}您正在创建两个:一个数组和一个切片。但由于它是一个切片文字,其结果将是片类型的,所以类型nums就是[]int你可以使用此代码验证:fmt.Printf("%T", nums) // Output: []int发生的情况是,将在后台自动创建/分配一个长度为 3 的数组,并使用列出的元素进行初始化,并且将创建一个引用该数组的切片,该切片将是表达式的结果。引用Go 语言规范:复合文字:切片文字描述了整个底层数组文字。因此,切片文字的长度和容量是最大元素索引加一。切片文字具有以下形式[]T{x1, x2, … xn}and 是应用于数组的切片操作的简写:tmp := [n]T{x1, x2, … xn}tmp[0 : n]数组字面量还包括长度,例如:arr := [3]int{1, 2, 3}arr2 := [...]int{1, 2, 3} // Length will be computed by the compilerfmt.Printf("%T", arr) // Output: [3]intfmt.Printf("%T", arr2) // Output: [3]int
-
青春有我
由于您没有指定长度,因此它是一个切片。数组类型定义指定长度和元素类型:请参阅“ Go Slices: usage and internals ”切片文字的声明就像数组文字一样,只是您省略了元素计数。虽然可以使用名为 make 的内置函数创建切片,但您使用文字形式来创建切片。创建的切片的内部与数组不同:make([]byte, 5)
-
慕标琳琳
在 go 中,数组类型包括它们的length。由于您省略了长度,因此它是一个切片:array := [3]int{1, 2, 3} // Array since it includes length (3).slice := array[:] // Slice since there is no length specified.fmt.Printf("%#v - %T\n", slice, slice) // %T means "type".fmt.Printf("%#v - %T\n", array, array)// [3]int{1, 2, 3} - [3]int// []int{1, 2, 3} - []int在上面的示例中,我们通过将切片设置为array. 如果您要编辑其中一个array或slice两个,那么两者都会改变,因为“切片”本质上是“阵列”存储的视图。slice[0] = 456 // And array[0] == 456array[0] = 789 // And slice[0] == 789