在没有 make 的情况下创建 Go 切片

nums := []int{2, 3, 4}

这在 go 中有什么作用?我是在创建一个数组还是一个切片?

从这个:https://gobyexample.com/range,它说切片。但我认为它是一个数组。


慕尼黑8549860
浏览 200回答 3
3回答

繁星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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go