仿做静态网站多少钱/哪里有网站推广优化
🌈Don’t worry , just coding!
内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。
📗概念
在Go语言中,泛型(Generics)允许你编写可以处理不同数据类型的函数和数据结构。
Go在1.18版本中引入了泛型,使得开发者能够更灵活地编写代码,减少重复。
泛型允许你定义一个函数或类型,使其能够接受任意类型的参数,而不需要在定义时指定具体的类型。
💻代码
基本使用
package mainimport "fmt"// 定义一个泛型函数
func Print[T any](value T) {fmt.Println(value)
}func main() {Print(123) // 打印整数Print("Hello Go!") // 打印字符串Print(3.14) // 打印浮点数
}
定义泛型struct
package mainimport "fmt"// 定义一个泛型结构体
type Pair[T any] struct {First TSecond T
}func main() {// 创建一个整型的 PairintPair := Pair[int]{First: 1, Second: 2}fmt.Println(intPair)// 创建一个字符串的 PairstringPair := Pair[string]{First: "Hello", Second: "World"}fmt.Println(stringPair)
}
使用约束类型
package mainimport "fmt"// 定义一个约束,只接受数字类型
type Number interface {int | int32 | int64 | float32 | float64
}// 定义一个泛型函数
func Add[T Number](a, b T) T {return a + b
}func main() {fmt.Println(Add(1, 2)) // 整数相加fmt.Println(Add(1.5, 2.5)) // 浮点数相加
}
切片、链表泛型
= = !看不懂警告,大片注释来袭!!
package mainimport "fmt"// 定义一个函数SlicesIndex,输入一个切片 s 和一个值 v,返回一个int类型
// 这里看不懂,先别急,下面我会好好解释
// S ~[]E:这里 S 是一个类型参数,表示它是一个切片类型([]E)
// 使用了类型约束 ~,表示 S 可以是任何基于 E 的切片类型(例如 []int、[]string 等)。
// E comparable:E 是另一个类型参数,表示可以与其他值进行比较的类型(如整型、字符串等)
// comparable 是一个内置的约束,表示该类型支持相等比较。
// s S:函数的第一个参数 s 是一个切片,类型为 S。
// v E:函数的第二个参数 v 是要查找的值,类型为 E
func SlicesIndex[S ~[]E, E comparable](s S, v E) int {//在切片中查找值 v 的索引,找不到时返回-1for i := range s {if v == s[i] {return i}}return -1
}// type List[T any]:定义一个名为 List 的泛型类型。
// T 是一个类型参数,any 表示 T 可以是任何类型。
type List[T any] struct {head, tail *element[T]//head 和 tail 是两个字段,分别指向链表的头部和尾部元素//*element[T] 表示这两个字段是指向 element[T] 类型的指针。}// element[T] 定义结构体类型,类型是any,数据为val 任意类型,指向下一个节点的指针next *element[T]
type element[T any] struct {next *element[T]val T
}// 定义函数Push ,lst 是指向链表的指针注意写法是List[T],可以直接修改链表的内容。
// v T 是要插入链表中的值,类型为 T,即链表支持的任意类型。
func (lst *List[T]) Push(v T) {//判断链表的尾指针 tail 是否为 nilif lst.tail == nil {//如果链表为空,创建一个新的 element[T],并将其值设置为 v,然后将这个新元素的内存地址赋值给链表的头指针 headlst.head = &element[T]{val: v}//将 tail 指向 head,因为此时链表中只有一个元素lst.tail = lst.head} else {//如果链表非空,创建一个新的 element[T],并将其值设置为 v,然后将这个新元素链接到当前 tail 的 next 指针上。lst.tail.next = &element[T]{val: v}//更新 tail 指针,使其指向新添加的元素,保持 tail 始终指向链表的最后一个元素。lst.tail = lst.tail.next}
}// 输入:定义函数AllElements,lst 是指向链表的指针
// 输出:返回一个 []T 类型的切片,包含链表中的所有元素。
func (lst *List[T]) AllElements() []T {//定义空的切片 elems,用于存储链表中的所有元素。var elems []T//for循环从链表的头部开始遍历。//e 是当前节点的指针,初始指向链表的头部 lst.head//循环条件是 e 不为 nil(即未到达链表末尾)//在每次循环中,将当前节点 e 的值 e.val 添加到切片 elems 中for e := lst.head; e != nil; e = e.next {elems = append(elems, e.val)}//循环结束后,返回包含链表中所有元素的切片 elemsreturn elems
}func main() {var s = []string{"foo", "bar", "zoo"}fmt.Println("index of zoo:", SlicesIndex(s, "zoo"))_ = SlicesIndex[[]string, string](s, "zoo")//定义一个 List[int] 类型的变量 lst,这是一个空的整型链表lst := List[int]{}//调用push向链表添加元素lst.Push(10)lst.Push(13)lst.Push(23)//打印链表中的全部元素fmt.Println("list:", lst.AllElements())
}//输出
//index of zoo: 2
//list: [10 13 23]
🔍泛型理解
- 代码中看到[T any]之类的字眼就表示这是泛型
- 灵活性:泛型使得函数和数据结构能够处理多种类型,减少了代码重复。
- 类型安全:在编译时检查类型,确保类型安全。
- 简化代码:通过泛型,可以编写更简洁和可重用的代码。
链表、切片泛型还需要多加练习掌握。
无他,唯手熟尔。
💪无人扶我青云志,我自踏雪至山巅。
相关文章:

【go从零单排】泛型(Generics)、链表
🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,泛型(Generics)允许你编写可以处理…...

IoTDB 与 HBase 对比详解:架构、功能与性能
五大方向,洞悉 IoTDB 与 HBase 的详尽对比! 在物联网(IoT)领域,数据的采集、存储和分析是确保系统高效运行和决策准确的重要环节。随着物联网设备数量的增加和数据量的爆炸式增长,开发者和决策者们需要选择…...

推荐一款ETCD桌面客户端——Etcd Workbench
Etcd Workbench 我相信很多人在开始管理ETCD的时候都去搜了Etcd客户端工具,然后找到了官方的Etcd Manager,但用完之后发现它并不好用,还不支持多连接和代码格式化,并且已经好几年不更新了,于是市面上就有了好多其他客…...

01 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究
文章目录 Oracle 数据库存储结构深度解析:从数据文件到性能优化的全链路探究一、Oracle存储结构的物理层次1.1 控制文件(Control File)1.2 联机重做日志文件(Online Redo Log File)1.3 数据文件(Data File&…...

AI教育革命:个性化学习的新篇章
内容概要 在 教育 领域,人工智能 的崭露头角带来了前所未有的变化。如今,个性化学习 已不再是一个遥不可及的梦想,而是通过 AI 技术真正实现的可能。借助先进的数据分析能力,教师可以实时跟踪和评估每位学生的学习进度࿰…...

【网络原理】万字详解 UDP 和 TCP
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. UDP1.1 UDP 报文格式1.1.1 源端口/目的端口1.1.2 报文长度1.1.3 校验和 2. TCP2.1 TCP 报文结构2.2 TCP 特…...

从零开始搭建Halo个人博客
前言 老话说得好,好记性不如烂笔头。对于程序员来说,学无止境,需要学习的东西很多,而如果不记录下来可能过不了多久就忘记了,而记录下来这一步也能很好地贯彻费曼学习法。 其实网上有很多博客平台,但是自…...

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO
2024.11.9更新 开关mpo ulps 感觉有用但是还是掉驱动,现在确定是window顶驱动问题 按网上的改注册表和组策略会让自己也打不上驱动 目前感觉最好的办法就是,重置此电脑,然后你就摆着电脑挂个十分钟半小时别动,一开始他是不显示…...

数据结构——二叉树(续集)
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…...

ElasticSearch学习篇16_《检索技术核心20讲》进阶篇之空间检索
背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243,文档形式记录笔记。 相关问题: 查询范围固定的需求 直接计算两点之间距离区域二进制编码GeoHash编码 查询范围不固定的需求 GeoHash编码索引结构设计 基于…...

uni-app跨域set-cookie
set-cookie的值是作为一个权限控制的 首先,无论什么接口都会返回一个set-cookie,但未登录时,set-cookie是没有任何权限的 其次,登录接口请求时会修改set-cookie,并且在后续其他接口发起请求时,会在请求头…...

移动应用开发:简易登录页
文章目录 简介一,创建新活动二,设计UI布局三,编写活动代码四,运行应用程序注意 简介 使用Android Studio编写的简单Android 登录应用程序,该应用程序包含一个登录界面,具有账号和密码两个文本框࿰…...

C++_ C++11的override和final
文章目录 1. override 关键字2. final 关键字在虚函数上使用 final在类上使用 final 1. override 关键字 用于明确表示派生类中的某个虚函数是用来重写基类中的虚函数的,这样编译器会检查基类,看看是否确实存在同样的虚函数,如果没有匹配&am…...

【MyBatis源码】SQL 语句构建器AbstractSQL
文章目录 介绍org.apache.ibatis.jdbc.SQLSQL类使用示例SelectProvider搭配动态SQLAbstractSQL类源码分析 介绍 当我们需要使用Statement对象执行SQL时,SQL语句会嵌入Java代码中。SQL语句比较复杂时,我们可能会在代码中对SQL语句进行拼接,查…...

C++OJ_二叉树的层序遍历
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C_OJ 小伞的主页:xiaosan_blog 二叉树的层序遍历 102. 二叉树的层序遍历 - 力扣(LeetCode࿰…...

什么是直方图算法
什么是直方图算法? 直方图算法是一种优化决策树分裂点搜索效率的算法,被广泛应用于像 LightGBM 和 XGBoost 这样的梯度提升决策树框架中。其核心思想是通过将连续特征的取值范围离散化为有限的区间(称为 bins),在这些…...

pg_dump -Fc 导出的自定义格式数据库文件 相关操作
实例 将 test.dmp 文件转换为普通SQL内容, 并打印到屏幕 pg_restore -U postgres -Fc -f - test.dump将 test.dmp 文件转换为普通SQL内容, 并输出到 test.sql 文件中 pg_restore -U postgres -Fc -f test.sql -v test.dump备份得到自定义格式的数据库文件(dmp) pg_dump -U…...

Oh My Posh安装
nullSet up your terminalhttps://ohmyposh.dev/docs/installation/windows Git ee oh-my-posh: Windows上的oh-my-zsh,源地址 https://github.com/JanDeDobbeleer/oh-my-posh.git (gitee.com)https://gitee.com/efluent/oh-my-posh...

Node.js——fs模块-文件夹操作
1、借助Node.js的能力,我们可以对文件夹进行创建、读取、删除等操作 2、方法 方法 说明 mkdir/mkdirSync 创建文件夹 readdir/readdirSync 读取文件夹 rmdir/rmdirSync 删除文件夹 3、语法 其余的方法语法类似 本文的分享到此结束,欢迎大家评论区…...

15分钟学 Go 实战项目三 : 实时聊天室(学习WebSocket并发处理)
实时聊天室:学习WebSocket并发处理 目标概述 在本项目中,我们将创建一个实时聊天室,使用Go语言和WebSocket来处理并发消息交流。这将帮助你深入理解WebSocket协议的工作原理以及如何在Go中实现并发处理。 1. 项目需求 功能需求 用户可以…...

架构评估的方法
三种评估方法※ 第一是基于问卷(检查表)的方式,通过问卷调查对系统比较熟悉的相关人员,这种方式主观性很强。 专家问卷评估、用户问卷评估、内部团队问卷评估 第二是基于度量的方式,对系统指标完全量化,基于量化指标评价系统,这种方式需要评估者对系统非常熟悉。 软件质…...

羲和数据集收集器1.0
为了提升问答对的提取能力并完善GUI,我们从以下几个方面进行改进: 增强文本清理和解析能力:确保能够更准确地识别问答对。 支持更多文件格式:除了现有的 .txt, .docx, 和 .pdf,可以考虑支持其他常见格式如 .xlsx 等。 优化GUI设计:提供更友好的用户界面,包括进度条、日…...

ENSP OSPF和BGP引入
路由协议分为:内部网关协议和外部网关协议。内部网关协议用于自治系统内部的路由,包括:RIP和OSPF。外部网关协议用于自治系统之间的路由,包括BGP。内部网关协议和外部网关协议配合来共同完成网络的路由。 BGP:边界网关路由协议(b…...

软件工程 软考
开发大型软件系统适用螺旋模型或者RUP模型 螺旋模型强调了风险分析,特别适用于庞大而复杂的、高风险的管理信息系统的开发。喷泉模型是一种以用户需求为动力,以对象为为驱动的模型,主要用于描述面向对象的软件开发过程。该模型的各个阶段没有…...

证书学习(六)TSA 时间戳服务器原理 + 7 个免费时间戳服务器地址
目录 一、简介1.1 什么是时间戳服务器1.2 名词扩展1.3 用时间戳标记顺序1.4 7 个免费TSA时间戳服务器地址(亲测可用)1.5 RFC 3161 标准二、时间戳原理2.1 时间戳服务工作流程2.2 验证工作流程2.3 举个例子2.4 时间戳原理总结三、代码实现3.1 curl 命令请求时间戳3.2 java 代码…...

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL
在当今数字化时代,安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台,它不仅提供了视频远程监控、录像、存储与回放等基础功能,还涵盖了视频转码、视频快照、…...

c中柔性数组
c99中,结构中最后一个元素允许是未知大小的数组,这就叫柔性数组成员。 柔性数组的特点 1.结构中柔性数组前必须至少有一个其他成员 2.sizeof返回的这种结构大小不包括柔性数组的内存 3.包含柔性数组成员的结构用malloc函数进行动态分配,并…...

图像信号处理器(ISP,Image Signal Processor)详解
简介:个人学习分享,如有错误,欢迎批评指正。 图像信号处理器(ISP,Image Signal Processor) 是专门用于处理图像信号的硬件或处理单元,广泛应用于图像传感器(如 CMOS 或 CCD 传感器&a…...

越权访问漏洞
V2Board Admin.php 越权访问漏洞 ## 漏洞描述 V2board面板 Admin.php 存在越权访问漏洞,由于部分鉴权代码于v1.6.1版本进行了修改,鉴权方式变为从Redis中获取缓存判定是否存在可以调用… V2Board Admin.php 越权访问漏洞 漏洞描述 V2board面板 Admin.ph…...

【Ant.designpro】上传图片
文章目录 一、前端二、后端 一、前端 fieldProps:可以监听并且获取到组件输入的内容 action{“/api/upload_image”} 直接调用后端接口 <ProFormUploadButtonlabel{"上传手续图片"}name{"imgs"}action{"/api/upload_image"}max{5} fieldPro…...