当前位置:网站首页>The usage of slice and the difference between slice and array
The usage of slice and the difference between slice and array
2022-04-23 19:21:00 【Handsome that handsome】
slice yes go A linguistic feature of , It's kind of like cpp Of vector, Variable length , Can expand space . Today I read it in detail , Make a summary .
slice It's essentially an interval , The prototype is []T, The general implementation is as follows :
type slice struct {
first *T
len int
cap int
}
What you can see is a pointer to an array , So it's changing slice Will change the value of the array .
The usage difference between and array is not too big .
- Array based creation :
var myArrary [3]int = [3]int{
1,2,3}
var mySlice []int = myArray[:2] //[first:last] The way , Make up when you are short 0
- Create directly :
mySlice = make([]int, 5)// Created a 5 The initial value is 0 The section of
mySlice = make([]int, 5, 10)// Created a 5, Capacity of 10 The section of
- function :
len() Returns the number of elements
cap() Returns the size of the container
append() New elements
mySlice = append(mySlice, 1, 2, 3) // The parameter type of the latter is actually an indefinite parameter
mySlice2 = []int{
7, 8, 9}
mySlice = append(mySlice, mySlice2...) Join in ... It means that after breaking up, it is passed into
- copy() Deep copy slice
slice1 := []int{
1, 2, 3, 4, 5}
slice2 := []int{
1, 2, 3}
copy(slice2, slice1)//copy slice Before 3 Elements to slice2
slice2 = slice1 // Will copy a reference to slice2
- Different from array
func arrayModify(array [5]int) {
newArray := array
newArray[0] = 88
}
func sliceModify(slice []int) {
newSlice := slice
newSlice[0] = 88
}
func main() {
array := [5]int{
1, 2, 3, 4, 5}
slice := []int{
1, 2, 3, 4, 5}
arrayModify(array)
sliceModify(slice)
fmt.Println(array)
fmt.Println(slice)
}
// [1 2 3 4 5]
// [88 2 3 4 5]
What you can see is that the array passes values , Does not change the value of the element , This and c/cpp Different , And though slice Value semantics , But it's itself a pointer type , So it changes the value , But it doesn't mean slice The reference , This needs attention . The problems caused by value semantics will be discussed in detail later .
版权声明
本文为[Handsome that handsome]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204210557451036.html
边栏推荐
猜你喜欢
随机推荐
网络协议之:sctp流控制传输协议
Customize the non slidable viewpage and how to use it
MySQL practical skills
[play with lighthouse] Tencent cloud lightweight server builds a full platform video analysis video download website
White screen processing method of fulter startup page
2022.04.23 (the best time for lc_714_to buy and sell stocks, including handling charges)
On the forced conversion of C language pointer
Oracle configuration st_ geometry
js 计算时间差
First experience of using fluent canvas
SQL常用的命令
Problems caused by flutter initialroute and home
openlayers 5.0 当地图容器大小改变时,重新加载地图
Steps to build a deep learning environment GPU
RuntimeError: Providing a bool or integral fill value without setting the optional `dtype` or `out`
An idea of rendering pipeline based on FBO
Solve the problem of invalid listview Click
该买什么设备,Keysight 给你挑好了
Web Security
Oracle配置st_geometry








