③ 数组和切片

本文即将看到:
⚬ --- 数组
⚬ --- 切片
⚬ --- append和copy

一、数组
1> 定义和使用

var name [size]typevar 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方法是不会建立两个切片的 
   联系的
posted @   Gonfei  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示