当前位置:网站首页>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
边栏推荐
- Openharmony open source developer growth plan, looking for new open source forces that change the world!
- Installation, use and problem summary of binlog2sql tool
- UML类图几种关系的总结
- Using 8266 as serial port debugging tool
- Is meituan, a profit-making company with zero foundation, hungry? Coupon CPS applet (with source code)
- c1000k TCP 连接上限测试1
- 该买什么设备,Keysight 给你挑好了
- SSDB基础1
- Why is PostgreSQL about to surpass SQL Server?
- 数据分析学习目录
猜你喜欢

binlog2sql 工具安装使用及问题汇总

RuntimeError: Providing a bool or integral fill value without setting the optional `dtype` or `out`

OpenHarmony开源开发者成长计划,寻找改变世界的开源新生力!

Application of DCT transform

Switching power supply design sharing and power supply design skills diagram

深度学习——特征工程小总结
![[transfer] summary of new features of js-es6 (one picture)](/img/45/76dba32e4fa7ed44a42e5f98ea8207.jpg)
[transfer] summary of new features of js-es6 (one picture)

8266 obtain 18b20 temperature

Redis optimization series (III) solve common problems after master-slave configuration

RuntimeError: Providing a bool or integral fill value without setting the optional `dtype` or `out`
随机推荐
NiO related Basics
Installation, use and problem summary of binlog2sql tool
Using oes texture + glsurfaceview + JNI to realize player picture processing based on OpenGL es
Lottery applet, mother no longer have to worry about who does the dishes (assign tasks), so easy
[报告] Microsoft :Application of deep learning methods in speech enhancement
Steps to build a deep learning environment GPU
SQL of contention for system time plus time in ocrale database
MySQL syntax collation (3)
Switching power supply design sharing and power supply design skills diagram
js上传文件时控制文件类型和大小
OpenHarmony开源开发者成长计划,寻找改变世界的开源新生力!
Openlayers 5.0 two centering methods
Openlayers draw rectangle
Translation of audio signal processing and coding: Preface
UML类图几种关系的总结
PostgreSQL
Openharmony open source developer growth plan, looking for new open source forces that change the world!
Codeforces Round #783 (Div. 2) D题解
Getting started with vcpkg
JVM的类加载过程