GO语言核心30讲 进阶技术

news/2024/10/10 15:33:15/

 原站地址:Go语言核心36讲_Golang_Go语言-极客时间

一、数组和切片

1. 两者最大的不同:数组的长度是固定的,而切片的长度是可变的。

2. 可以把切片看成是对数组的一层封装,因为每个切片的底层数据结构中,一定会包含一个数组。 切片也可以被看作是对底层数组的某个连续片段的引用(窗口)。

3. go语言不存在传值或传引用两种区分。 只要传递的是引用类型的,就是“传引用”。如果传递的是值类型的,就是“传值”。   切片属于引用类型,数组属于值类型。

4. 内建函数 len()计算长度,cap()计算容量。

例子:  s1是切片,底层数组是8个元素。 s2 := s1[3:6]

len(s2) = 6-3, 即 结束索引 减去 起始索引

cap(s2) = 8-3,即 底层数组长度 减去  起始索引 , 从起始索引位置向右扩展到最末端

5. 切片容量的增长逻辑:

(1) 一般情况下,新切片的容量将会是原切片容量的 2 倍。

(2) 如果新长度比原容量的 2 倍还要大,那么新容量就会以新长度为基准。

(3) 如果原长度大于等于1024,会以原容量的1.25倍作为基准,一直扩展到满足扩容需求。

6. 切片的底层数组在扩容时不会被替换。 扩容时是使用了新的切片和新的底层数组。 旧切片不变。

二、container包中的容器:List 和 Ring

1. List 容器,是一个双向链表,所以它支持下面的方法:

(1) 把内部元素移动到链表头部或尾部,或移动到另一个元素的前面或后面

(2) 插入新元素到链表头部或尾部,或一个元素的前面或后面

(3) 如果自己生成元素,直接传给链表的方法做 移动操作,链表不会接受。因为可以根据前后元素的指针数据做合法性判定。

2. List 支持开箱即用。经过声明的List变量 是一个长度为0的链表,是一个空壳,但可以直接使用。 使用之后再做初始化。这种延迟初始化可以分散初始化带来的计算量压力。

3. List内部就是一个循环链表。它的根元素不持有实际的元素值,但连接了这个循环链表的首尾两端。

4. List 和 Ring 的区别

(1) List 和 Ring 都是循环链表

(2) List 可以添加和删除元素, Ring不可以。Ring要添加元素,需要重建一个新的Ring.

(3) Ring的数据结构仅由它自身即可代表,而List则需要由它以及Element类型联合表示。


http://www.ppmy.cn/news/1443497.html

相关文章

服务器网站漏洞怎么修复

服务器网站漏洞的修复是一个关键且复杂的过程,涉及到多个层面的安全加固。以下是一个关于如何修复服务器网站漏洞的详细指南。安全狗专业做服务器安全,有任何服务器安全问题都可以找安全狗哦. ​一、识别和分析漏洞 首先,要确定服务器网站存在…

[C++] 类和对象 _ 剖析构造、析构与拷贝

一、构造函数 构造函数是特殊的成员函数,它在创建对象时自动调用。其主要作用是初始化对象的成员变量(不是开辟空间)。构造函数的名字必须与类名相同,且没有返回类型(即使是void也不行)。 在C中&#xff0…

CSS border边框(理解网页边框制作)

目录 一、border边框介绍 1.概念 2.特点 3.功能 4.应用 二、border边框用法 1.border边框属性 2.边框样式 3.边框宽度 4.边框颜色 5.边框-单独设置各边 6.边框-简写属性 三、border边框属性 四、border边框实例 1.创建带有阴影效果的边框: 2. 创建一个类似标…

Llama 3消费级PC安装与运行教程

我是 Llama 的忠实粉丝。 Meta 发布其 LLM 开源代码对整个科技界来说是一项净收益,其宽松的许可证允许大多数中小型企业在几乎没有任何限制的情况下使用其 LLM(当然,在法律范围内)。 他们的最新版本是备受期待的 Llama 3。 Llama…

Golang Colly批量爬取小红书图片

语言:Golang 库:Iris/Colly 先看输入日志: Saved file: images\20240428190531_2_0.jpg It is image 20240428190532_2_1.jpg Saved file: images\20240428190532_2_1.jpg It is image 20240428190533_2_2.jpg Saved file: images\20240428190533_2_2.jpg It is image 2024…

香港BTC、ETH现货ETF同时通过,对行业意义几何?

香港比美国更快一步通过以太坊现货 ETF。 2024 年 4 月 15 日,香港嘉实国际资产管理有限公司(Harvest Global Investments)今天宣布,得到香港证监会的原则上批准,将推出两大数字资产(比特币及以太坊&#…

音频智能切换器JR-AR42-A

憬锐JR-AR42-A音频自动智能切换器(四切一),具备四路模拟卡侬立体声音频输入,两路模拟卡侬立体声音频输出,其中输入第1路和输出第1路为断电直通通道。具有输入音频信号幅度判别,可设置门限电平和切换延时时间,可以根据需…

装饰器模式、代理模式、适配器模式对比

装饰器模式、代理模式和适配器模式都是结构型设计模式,它们的主要目标都是将将类或对象按某种布局组成更大的结构,使得程序结构更加清晰。这里将装饰器模式、代理模式和适配器模式进行比较,主要是因为三个设计模式的类图结构相似度较高、且功…