③ 数组和切片
本文即将看到:
⚬ --- 数组
⚬ --- 切片
⚬ --- append和copy
一、数组
1> 定义和使用
● var name [size]type
● var name [...]type //自动填充长度
● var name = [size]type{ } //初始化并定义
● name := [...]tpye{}
2> 数组的长度和遍历
● len(数组名) //获取数组长度
● for...range //遍历 也可以用for
for 下标,值 := range 数组名{ }
3> 多维数组
● name := [...]...[size]tpye{}
4> 值类型
Go中的数组是值类型,而不是引用类型。这意味着当它们被分配给一个新变量时,将把原始数组的副本分配给新变量。如果对新变量进行了更改,则不会在原始数组中反映。`
二、切片 (Slice)
1> 切片涵义
● 切片是一种方便、灵活且强大的包装器。切片本身没有任何数据。它们只是对现有数组的引用。
● 切片与数组相比,不需要设定长度,在[]中不用设定值,相对来说比较自由
● 从概念上面来说slice像一个结构体,这个结构体包含了三个元素:
指针,指向数组中slice指定的开始位置
长度,即slice的长度
最大长度,也就是slice开始位置到数组的最后位置的长度
2> 切片的语法
定义切片:
var identifier(标识符) []type //切片不需要说明长度。
使用make()函数来创建切片:
var slice []type = make([]type,len)
slice := make([]type, len) //简写
创建新切片:
slice = slice[start:end]
3> 修改切片
● slice没有自己的任何数据。它只是底层数组的一个表示。对slice所做的任何修改都将反映在底层数组中。
● 当多个片共享相同的底层数组时,每个元素所做的更改将在数组中反映出来。
4> 切片的长度和容量
len() //长度
cap() // 容量
一个切片在未初始化之前默认为 nil,长度为 0
三、append和copy
1>
● append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
● copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
2>
var num []int
nums := append(num, 0) //允许追加空切片
nums = append(nums, 1) //向切片添加一个元素
nums = append(nums, 2,3,4) //同时添加多个元素
num1 := make([]int, len(nums), (cap(nums))*2) //创建切片 num1 是之前切片的两倍容量
copy(num1,nums)// 拷贝 nums 的内容到 num1
//num1与nums两者不存在联系,nums发生变化时,num1是不会随着变化的。也就是说copy方法是不会建立两个切片的
联系的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?