芯片资讯
热点资讯
- FPGA排序-冒泡排序(Verilog版)介绍
- Infineon品牌SLE 4432 C芯片IC EEPROM 256BYTE CHIP的技术和方案应用介绍
- 深度解析索尼的多重曝光HDR技术
- FPGA浮点IP内核究竟有哪些优势呢?
- Microchip微芯半导体AT97SC3205T-X3A1C20B芯片FF COM I2C TPM 4.4MM TSS
- 聊一聊MEMS先生的微机电系统
- Melexis品牌MLX81113KDC-BAB-000-RE芯片IC LIN RGB CTRLR 32KB 4CH 8
- pH传感器的工作原理及应用
- Atmel品牌AT17LV65-10JI芯片CONFIG MEMORY, 64KX1, SERIAL的技术和方案应用介绍
- 大疆的低成本高阶智能驾驶方案详解
你的位置:EEPROM带电可擦可编程IC存储器芯片大全-亿配芯城 > 芯片资讯 > Go切片的内部实现
Go切片的内部实现
- 发布日期:2023-12-31 08:29 点击次数:194 切片
Go中提供了一种灵活,功能强悍的内置类型Slices切片(“动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
切片中有两个概念:一是len长度,二是cap容量,长度是指已经被赋过值的最大下标+1,可通过内置函数len()获得。
容量是指切片目前可容纳的最多元素个数,可通过内置函数cap()获得。切片是引用类型,因此在当传递切片时将引用同一指针,修改值将会影响其他的对象。
s := []int {1,2,3 } //直接初始化切片 s := arr[:] //用数组初始化切片 s = make([]int, 3) //make初始化,有3个元素的切片, EEPROM带电可擦可编程存储器芯片大全 len和cap都为3 s = make([]int, ATMEGA系列ATMEL芯片COM 2, 电子元器件PDF资料大全 3) //make初始化, CMOS图像传感器集成电路芯片EEPROM带电可擦可编程存储器芯片大全有2个元素的切片,芯片交易网IC交易网 len为2, cap为3 a = append(a, 1) // 追加1个元素 a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式 a = append(a, []int{1,2,3}...) // 追加一个切片, 切片需要解包
不过要注意的是,在容量不足的情况下,append的操作会导致重新分配内存,可能导致巨大的内存分配和复制数据代价。
a = append([]int{0}, a...) 切片头部添加元素。在开头一般都会导致内存的重新分配,而且会导致已有的元素全部复制1次。
因此,从切片的开头添加元素的性能一般要比从尾部追加元素的性能差很多。
//切片是地址传递 func updateSlice(a []int) { a[0] = 3 } func main() { //切片 var a = []int{1, 2, 3} c := make([]int, 5) copy(c, a) updateSlice(c) fmt.Println(c) } 打印 [3 2 3 0 0]
切片的内部实现
切片是一个很小的对象,它对底层的数组(内部是通过数组保存数据的)进行了抽象,并提供相关的操作方法。
切片是一个有三个字段的数据结构,这些数据结构包含 Golang 需要操作底层数组的元数据:
这 3 个字段分别是指向底层数组的指针、切片访问的元素的个数(即长度)和切片允许增长到的元素个数(即容量)。
相关资讯
- golang通过切片创建新的切片2023-12-31
- FPGA技术的内部工作原理、应用和优势2023-12-27
- 基于rGO-Ru OEP的化学电阻式CO气体传感器设计2023-12-26