11.Go 列表

列表是一种非连续的存储容器,由多个节点组成,节点通过一些变量记录彼此之间的关系,列表有多种实现方法,如单链表、双链表等。

在Go语言中,列表使用container/list包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。

1、列表的创建

list的初始化有两种方法,分别是使用New()函数和var关键字声明。两种方法的初始化效果是相同的。

  • 通过container/list包的New()函数初始化list,语法:变量名 := list.New()
  • 通过var关键字声明初始化list,语法:var 变量名 list.List

列表与切片和map不同的是,列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,例如,给列表中放入了一个interface{}类型的值,取出值后,如果要将interface{}转换为其他类型,将会发生宕机。

2、插入元素

双链表支持从队列前方或后方插入元素,对应的方法分别是PushFront()和PushBack()。

这两种方法都会返回一个*list.Element结构,如果需要删除插入的元素,则只能通过*list.Element配合Remove()方法进行删除,这种方法可以让删除更加高效,同时也是双链表的特性之一。

l := list.New()
l.PushFront("first")
l.PushBack("second")
3、删除元素

列表插入函数的返回值会提供一个*list.Element结构,这个结构记录着列表元素的值及与其他节点之间的关系等信息,从列表中删除元素时,需要用到这个结构进行快速删除。

func main() {l := list.New()l.PushFront("first ")l.PushBack("second ")// 尾部添加后保存元素句柄element := l.PushBack("third ")// 在 third之后添加highl.InsertAfter("high ", element)// 在 third之前添加lowl.InsertBefore("low ", element)// 删除 elementl.Remove(element)for i := l.Front(); i != nil; i = i.Next() {fmt.Print(i.Value) // first second low high}
}

4、列表的遍历

遍历双链表需要配合Front()函数获取头元素,遍历时只要元素不为空就可以继续进行,每次遍历都会调用元素的Next()函数,例如:

func main() {l := list.New()l.PushFront("first ")l.PushBack("second ")for i := l.Front(); i != nil; i = i.Next() {fmt.Print(i.Value) // first second low high}
}

  • 使用for语句进行遍历,其中i:=l.Front()表示初始赋值,只会在一开始执行一次,每次循环会进行一次i != nil语句判断,如果返回false,表示退出循环,反之则会执行i = i.Next()。
  • 使用遍历返回的*list.Element的Value成员取得放入列表时的原值。
5、复合数据类型总结

(1)Go语言中切片用来处理数据的集合,映射用来处理具有键值对结构的数据。

(2)内置函数make()可以创建切片和映射,并指定原始的长度和容量。也可以直接使用切片和映射字面量,或者使用字面量作为变量的初始值。切片有容量限制,不过可以使用内置的append()函数扩展容量。映射的增长没有容量或者任何限制。

(3)内置函数len()可以用来获取切片或者映射的长度,内置函数cap()只能用于切片,通过组合,可以创建多维数组和多维切片,也可以使用切片或者其他映射作为映射的值,但是切片不能用作映射的键。将切片或者映射传递给函数的成本很小,并且不会复制底层的数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物理模拟重力 斜抛运动计算 抛物线计算

物理模拟重力 斜抛运动计算 抛物线计算 一、介绍二、原理三、实现如下PhysicsUtil.cs 工具类Missile.cs 四、资源分享 一、介绍 模拟Unity原始重力系统进行重写,可是实现发射到指定目标位置并能继续当前力进行自身的弹力与摩擦继续运动 二、原理 将Unity原始不受控…

​一个人成长最快的方式

一个人成长最快的方式就是:保持阅读,向行业的专家学习,在实践中不断的复盘总结,循环这三点,没有学不好的东西。基于此,推荐一些在产品、设计领域的专家,关注他们,学习他们&#xff0…

springcloud 服务网关Zuul实战(二)路由访问映射规则

上篇文中已经讲完基本的路由配置,但是我们如何对访问的微服务做映射 访问的地址:http://myzuul.com:9527/microservicecloud-dept/dept/get/2 从访问地址可以分析出我们真实的微服务名字,我们为了安全起见将真实的微服务名字隐藏&#xff0…

B端 — 卡片式列表设计

作者:Nick(转载已取得作者授权)卡片式列表是一种很好的集合信息的方式,它既有好处也有弊端,因此需要根据场景和内容确定展现形式。本文结合了案例与大家分享一下卡片式列表设计的一些思考。一、定义1. 什么是卡片物理世…

springcloud config配置中心概述

Spring Cloud Config简介 Spring Cloud Config 是 Spring Cloud 家族中最早的配置中心,虽然后来又发布了 Consul 可以代替配置中心功能,但是 Config 依然适用于 Spring Cloud 项目,通过简单的配置即可实现功能。 配置文件是我们再熟悉不过的…

【计算机四级(网络工程师)笔记】操作系统运行机制

目录 一、中央处理器(CPU) 1.1CPU的状态 1.2指令分类 二、寄存器 2.1寄存器分类 2.2程序状态字(PSW) 三、系统调用 3.1系统调用与一般过程调用的区别 3.2系统调用的分类 四、中断与异常 4.1中断 4.2异常 🌈嗨&#xff…

springcloud config服务端配置(一)

用自己GitHub账号在GitHub上新建一个microservicecloud-config的新的repository 又上一步我们得到了ssh的git地址 gitgithub.com:470812087/microservicecloud-config.git 本地目录新建(F:\JAVA\ideaIU\microservicecloud-config-repository)仓库并…

解决git@github.com: Permission denied (publickey). Could not read from remote repository

原因分析 Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因 客户端与服务端未生成 ssh key客户端与服务端的ssh key不匹配 找到问题的原因了,解决办法也就有了,重新生成一次ssh key ,服务端也…

springcloud config服务端配置(二)

接着上一篇把把本地仓库yml文件推送到github之后&#xff0c;下面我们就是实战了&#xff0c;各个微服务如何读取到远程仓库的的yml文件配置 一&#xff0c;新建一个Module模块microservicecloud-config-3344 它即为Cloud配置中心模块 二&#xff0c;pom文件添加依赖 <?xm…

C4996    'fopen': This function or variable may be unsafe

C4996 fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 在工程文件处右击&#xff0c;选择属性->配置属性->C/C->预处理器 加入一个_CR…

使用postman操作ElasticSearch

下载安装好postman之后 添加索引blog1&#xff08;因为ElasticSearch是restful请求所以我们用postman发送http请求给ElasticSearch&#xff09; { "mappings":{ "article":{ "properties":{ "i…

图像处理基本算法-形态学

形态学一般是使用二值图像&#xff0c;进行边界提取&#xff0c;骨架提取&#xff0c;孔洞填充&#xff0c;角点提取&#xff0c;图像重建。基本的算法:膨胀腐蚀&#xff0c;开操作&#xff0c;闭操作&#xff0c;击中击不中变换 几种算法进行组合&#xff0c;就可以实现一些非…

使用kibana客户端工具操作ElasticSearch(增删改查一)

&#xff08;因为ElasticSearch是restful请求所以 get post put delete这四种常见的请求&#xff09; put添加数据 get获取数据 #创建索引库lib 并且对索引库做了分片和备份&#xff08;由于这里是单机的ElasticSearch备份0&#xff09; PUT /lib/ {"settings"…

kibana客户端工具操作ElasticSearch(增删改查二)

#不指定id情况下 ElasticSearch自动生成id PUT /lib/user/ {"first_name":"Douglas","last_name":"Fir","age":23,"about":"I like to build cabinets","interests":["forestry"] …

机器学习笔记(一) : 线性建模——最小二乘法

讨论这个方法之前&#xff0c;先说些题外话。首先&#xff0c;我感觉机器学习是一门值得我们去了解和学习的一门技术&#xff0c;它不仅仅应用于我们的生活&#xff0c;而且不断地在改变着我们的方方面面。虽然很早就已经接触它&#xff0c;并开始学习&#xff0c;但是总体感觉…

ElasticSearch快速入门(一)介绍

Devops运维 ● Node(节点):单个的装有Elasticsearch服务并且提供故障转移和扩展的服务 器。 ●Cluster (集群) :一-个集群就是由一个或多个node组织在一 起&#xff0c;共同工作&#xff0c; 共同分享整个数据具有负载均衡功能的集群。 ● Document (文档) : -一个文档是-一个可…

flash遨游缓存问题

来源&#xff1a;http://leftice.iteye.com/blog/806605 Flash需要和JS交互,但是在ie外壳浏览器下,有时候缓存会导致页面刷新后flash无法工作. 会报出SecurityError. 这是因为Flash并没有完全准备好,就尝试和JS交互导致的问题. 解决的问题方式有几种: 1.在页面上设置不缓存,网上…

ElasticSearch快速入门二(Restful介绍)

本节课从三个方便讲解 什么是restful ? API: Application Programming Interface的缩写&#xff0c;中文意思就是应用程序接口. ●XML: . 可扩展标记语言&#xff0c;是一种程序与程序之间传输数据的标记语言 ●JSON: 英文javascript object notation的缩写&#xff0c;它是一…

ElasticSearch快速入门三(curl命令讲解)

API测试工具_微博开放平台&#xff1a;https://open.weibo.com/tools/console# 感兴趣是可以使用这个工具玩一下restful接口调用&#xff0c;可以更形象的了解restful 下面我们就继续下面的内内容讲解curl命令 什么是CURL&#xff1f; 就是以命令的方式来执行HTTP协议的请求…

ElasticSearch API文档查看

elastic官方API文档&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html