news 2026/4/16 17:15:00

Go语言中的切片

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go语言中的切片

Go 语言中的切片(Slice)是一个非常核心的数据结构,它是对数组的抽象和封装,提供了更灵活、强大的序列处理能力。

一.切片的基本概念

切片是一个动态数组,它由三个部分组成:

  • 指针:指向底层数组的起始位置

  • 长度(len):切片中当前元素的数量

  • 容量(cap):切片可以容纳的最大元素数量

注意:切片不是数组本身,而是数组的一层抽象。

二、数组 vs 切片(先分清)

数组(Array)

var a [3]int = [3]int{1, 2, 3}
  • 长度固定

  • 值类型

  • 很少直接用在业务代码中

切片(Slice)

var s []int = []int{1, 2, 3}
  • 长度可变

  • 引用语义

  • Go 业务代码的主角

三、切片的底层结构(非常重要)

Go 的切片在运行时是一个结构体:

type slice struct { ptr *T // 指向底层数组 len int // 当前长度 cap int // 容量 }

知识的三点:

  1. len:当前“能用”的元素个数

  2. cap:从ptr开始,底层数组最多能放多少

  3. 多个切片可能共享同一个底层数组

四、创建切片的几种方式

1. 字面量创建(最常用)

s := []int{1, 2, 3}
  • len = 3

  • cap = 3

2. 使用make函数创建(最推荐)

s := make([]int, 2, 5)

含义:

  • 长度 = 2(已有 2 个元素,默认值)

  • 容量 = 5(最多可扩到 5),可缺省。

3. 从数组 / 切片切出来

arr := [5]int{1, 2, 3, 4, 5} s := arr[1:4] // [2 3 4]

规则:

s := a[low : high] // 左闭右开

这是“视图”,不是拷贝

五、append:切片的扩容机制

基本用法,append会触发cap翻倍扩容

s := []int{1, 2} s = append(s, 3) //cap扩容为原来的2倍 fmt.Println(len(s), cap(s))

输出:3,4

扩容规则

  • 小容量:2 倍增长

  • 大容量:逐渐放缓(≈1.25x)

  • 具体策略由 Go runtime 决定

六、如何安全拷贝切片

使用 copy(官方推荐)

src := []int{1, 2, 3} dst := make([]int, len(src)) copy(dst, src) fmt.Println(dst)

输出:[1 2 3]

七、nil slice vs 空 slice

var s1 []int // nil slice s2 := []int{} // 空 slice s3 := make([]int,0) // 空 slice
属性s1s2 / s3
len00
cap00
== niltruefalse
append

八、切片作为函数参数

func modify(s []int) { s[0] = 100 }
  • 修改元素 → 会影响外部

  • append 扩容 → 不一定影响外部

因为 slice 本身是值传递(复制 slice 结构体)

九、遍历切片

for

for i := 0; i < len(s); i++ { fmt.Println(s[i]) }

range(最常用)

for i, v := range s { fmt.Println(i, v) }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 12:27:16

光伏并网系统这玩意儿说白了就是让太阳能板发的电乖乖并入电网。今天咱们直接拆开看里面的几个硬核模块,手把手撸点仿真代码,搞明白这些电路和控制策略到底怎么玩

三相光伏并网仿真模型 Boost&#xff0b;三相逆变器 PLL锁相环 MPPT最大功率点跟踪控制(扰动观察法) dq解耦控制 电流内环电压外环的并网控制策略先来看Boost电路这哥们。光伏板的输出电压经常不够高&#xff0c;得靠它来抬电压。核心逻辑就是调节占空比让输出电压稳定在设定值…

作者头像 李华
网站建设 2026/4/16 10:55:12

ARMv8-M架构IPSR寄存器读取函数解析

这是一个用于 ARMv8-M 架构 的 C 语言内联汇编函数&#xff0c;用于读取 IPSR&#xff08;中断程序状态寄存器&#xff09; 的值。 函数功能解析&#xff1a; 1. 函数声明 static inline uint32_t getipsr(void)static inline&#xff1a;内联函数&#xff0c;编译器会将函数…

作者头像 李华
网站建设 2026/4/16 10:56:04

SpringBoot+vue养老院运营管理系统

摘 要 目前&#xff0c;我国人口逐步进入老龄化&#xff0c;老人院事业在我国将会进入发展期&#xff0c;更多的年轻人会选择把家里的老人送到养老院&#xff0c;让自己的父母能够安享晚年。随之而来的是老人的安全问题&#xff0c;儿女会担心老人们能否在养老院幸福安全地生活…

作者头像 李华
网站建设 2026/4/16 11:04:22

基于springboot生鲜农产品保鲜及溯源管理系

基于Spring Boot的生鲜农产品保鲜及溯源管理系统是一个集成了多种先进技术的信息化管理系统&#xff0c;旨在提高生鲜农产品供应链的透明度和信息化水平。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 随着人们生活水平的提高和健康意识的增强&#xff0c;消费者对…

作者头像 李华
网站建设 2026/4/16 10:59:00

基于springboot企业支付费用管控平台

基于Spring Boot的企业支付费用管控平台是一个集成了多种支付管理和费用控制功能的综合性系统。以下是对该平台的详细介绍&#xff1a; 一、平台概述 该平台以Spring Boot框架为核心&#xff0c;结合前端技术&#xff08;如Vue.js等&#xff09;和关系型数据库&#xff08;如My…

作者头像 李华
网站建设 2026/4/16 16:00:05

C#面试题分享(一)

1.什么是C#&#xff0c;它的主要特点是什么&#xff1f; C#&#xff08;发音为C Sharp&#xff09;是一种由微软开发的现代、通用、面向对象的编程语言&#xff0c;作为.NET框架的一 部分&#xff0c;主要用于开发Windows应用、Web应用、移动应用等。其主要特点包括&#xff1a…

作者头像 李华