- 博客(17)
- 收藏
- 关注
原创 数据结构:基础线段树——线段树系列(提供模板)
线段树是一种二叉树形数据结构,每个节点代表一个区间(线段),并通过分治思想将大区间分解为小区间,实现高效查询与更新。
2025-12-26 17:05:31
69
原创 Gin.RouterGroup:分组、中间件与路径组合
Gin框架的路由核心是RouterGroup而非gin.Engine。RouterGroup提供路径前缀管理、中间件隔离、嵌套分组和统一方法注册等功能。通过分组机制可实现路径自动拼接(如/api/v1/users)和中间件作用域控制。支持HTTP方法路由、静态文件服务和多级分组嵌套,典型应用包括公共路由、认证路由组和管理员路由组。这种设计使Gin具备灵活的路由组织和中间件管理能力。
2025-12-25 14:57:28
159
原创 Gin 框架 JSON 全链路:从响应返回到请求绑定
Gin 框架在 Go 语言 Web 开发中通过高效 JSON 处理简化前后端交互。支持 c.JSON() 快速响应结构化数据(如 gin.H、自定义结构体或切片),并通过 ShouldBindJSON 自动解析请求体到结构体,结合 binding 标签实现字段验证(如必填、格式、范围等)。提供多种绑定方式(ShouldBind、MustBindWith),支持内容类型自动检测,确保数据安全性与一致性。示例展示了从简单响应到复杂验证的完整流程,凸显 Gin 在 API 开发中的实用性。
2025-12-24 17:14:03
330
原创 Gin路由:构建高效RESTful API
本文介绍了Gin框架中的HTTP方法路由和路径参数处理。主要内容包括:1)基础HTTP方法(GET/POST/PUT/DELETE/PATCH)的实现;2)HEAD和OPTIONS方法的特殊用途;3)路径参数获取方式,包括单个参数、多个参数和可选参数;4)特殊路由方法如Any和Handle;5)路由参数获取技巧,涵盖路径参数和查询参数。最后提供了一个完整的用户管理系统路由示例,展示了RESTful API的实现方式。文章结构清晰,代码示例丰富,适合快速掌握Gin框架的路由功能。
2025-12-23 17:17:04
145
原创 Gin 框架:*gin.Engine 主要方法
Gin框架的核心引擎*gin.Engine是整个Web应用的核心,提供路由管理、HTTP服务启动、中间件处理等关键功能。它继承自RouterGroup,支持各类HTTP方法路由注册(GET/POST等)、中间件添加和路由分组。此外还包含静态文件服务、错误处理(404/405)、模板渲染等服务启动方法(Run/RunTLS)。作为Gin应用的入口点,理解gin.Engine的结构和功能是掌握Gin开发的基础。
2025-12-22 16:31:40
199
原创 Tarjan算法图论全家桶系列--边双联通分量(eDCC)
边双连通分量(eDCC)是无向图的极大边连通子图,其内部无割边,不同分量通过割边连接。本文介绍了eDCC的定义、性质及Tarjan算法实现方法。算法基于DFS,通过比较dfn和low值识别分量,使用栈存储节点。文中提供了完整的C++模板实现,包括初始化、加边、运行算法和获取结果的方法,支持处理含重边的情况。该模板可高效计算图的边双连通分量及割边。
2025-12-16 22:12:58
154
原创 Tarjan算法图论全家桶系列--割边(桥)
割边是指删除后会增加图连通分量数量的边,具有必须是树边、不能是重边等性质。Tarjan算法基于DFS,通过dfn和low数组判断割边条件。文章提供了C++模板实现,包含邻接表输入接口和割边获取功能,适用于无重边图。该算法时间复杂度为线性,能高效找出所有割边。
2025-12-15 14:09:25
305
原创 Tarjan全家桶系列--割点
无向图中割点的定义及其Tarjan算法实现。割点是指删除该节点后图连通分量增加的节点。Tarjan算法基于DFS,使用dfn和low数组记录访问顺序和可达最小时间戳。判断割点的条件包括:非根节点u存在子节点v满足low[v]>=dfn[u],或根节点u拥有多个子树。文章提供了C++模板实现,包含邻接表输入接口和结果获取方法,时间复杂度为线性。
2025-12-14 15:19:07
129
原创 Tarjan全家桶系列--强联通分量
强连通分量(SCC)是有向图中任意两节点互相可达的极大子图。Tarjan算法通过DFS遍历,利用dfn(访问时间戳)和low(最小可达dfn)值识别SCC:当low[u]==dfn[u]时,栈顶到u的节点构成一个SCC。文中提供了C++模板,包含dfs函数实现核心逻辑,Run方法初始化并执行算法,Get获取SCC编号数组。示例展示了如何初始化邻接表、调用算法并获取结果。该算法高效(O(V+E)),适用于有向图连通性分析。
2025-12-13 15:45:56
155
原创 Go结构体标签(Tag)解析
摘要 本文深入解析Go语言结构体标签(Struct Tag)的使用,涵盖JSON序列化、数据库映射和Gin框架应用等场景。文章首先通过常见问题引入结构体标签的必要性,然后详细讲解标签的基础语法规则和常用类型。重点剖析了JSON标签的各种用法和选项,包括字段映射、空值忽略和类型转换等特性。同时介绍了数据库操作中sqlx和Gorm框架的标签使用方式,以及Gin框架中的参数绑定标签。通过大量代码示例展示了结构体标签在实际开发中的强大功能,帮助开发者掌握这一重要特性,提升Go语言开发效率。
2025-12-09 15:34:33
619
原创 Go接口相等性比较指南
Go语言接口相等性比较解析 本文深入探讨Go语言接口的相等性比较原理与实践。首先解析接口的底层结构,包括iface和eface两种类型,并通过代码示例展示其内部表示。核心规则指出:接口相等需同时满足类型相同和值相等两个条件。文章重点剖析了三个常见"陷阱":接口包装nil指针时看似相等实则不等、切片/映射等不可比较类型导致的编译错误,以及浮点数NaN的特殊比较行为。针对这些问题,提供了使用反射比较和自定义比较函数等解决方案。通过底层原理与实战案例的结合,帮助开发者彻底理解并正确使用Go接口
2025-12-08 20:05:02
273
原创 Go并发基石:进程、线程与 Goroutine 的区别
《并发编程三大概念:进程、线程、协程解析》 本文深入剖析了并发编程中的三种核心概念: 进程:作为资源分配的最小单位,具有独立内存空间,创建开销大但隔离性好 线程:CPU调度的基本单位,共享进程资源,创建开销中等但需处理同步问题 协程(Goroutine):Go语言实现的用户态轻量级线程,创建开销极小,通过Channel实现安全通信 三者对比显示:进程隔离性最强但开销大,线程提高了并发度,而协程在易用性和性能间取得最佳平衡。Go语言的Goroutine通过轻量级设计、简单语法和高效调度,成为现代并发编程的优秀
2025-12-07 15:47:07
605
原创 Go并发编程核心:Goroutine解析
Go语言通过Goroutine实现了轻量级并发编程,其核心优势在于: 高效轻量:Goroutine仅需2-4KB栈空间,可轻松创建数万个 低开销:用户态切换速度快(纳秒级),远优于传统线程 简单易用:只需go关键字即可启动并发任务 强大调度:采用GMP模型(Goroutine-Machine-Processor)实现高效调度 关键实践: 使用channel和WaitGroup进行同步 控制并发数量避免资源耗尽 通过context管理Goroutine生命周期 注意共享数据保护 Goroutine使Go成为高
2025-12-06 17:55:17
562
1
原创 Go语言字符类型解析
Go语言提供了byte和rune两种字符类型:byte是uint8别名,用于处理ASCII字符;rune是int32别名,支持全Unicode字符。关键区别在于:byte占用1字节,仅支持ASCII;rune占用4字节,可处理中文、Emoji等多语言字符。字符串遍历时,推荐使用range或转换为[]rune以避免乱码。最佳实践包括:获取字符数用len([]rune(str)),英文处理用byte,多语言用rune。理解这两种类型的区别是Go字符串处理的基础。
2025-12-05 15:58:57
758
原创 Go语言核心优势浅析:从语法、并发生态到设计哲学
Go语言凭借其简洁的语法设计(无类、无继承、无异常)、原生的并发支持(goroutine和channel)、高效的开发体验(快速编译、单一可执行文件)以及出色的性能表现(接近C语言的执行效率),成为了云原生时代的首选语言。文章通过代码示例对比展示了Go语言在可读性、并发编程和部署便捷性上的优势,并列举了Docker、Kubernetes等成功案例,说明Go语言在工程实践中的卓越表现,特别适合追求高效开发和团队协作的场景。
2025-12-05 00:18:36
664
原创 关闭输入输出同步以提高C++的IO效率
默认情况下,C++的标准输入输出库(iostream)会与C语言的标准输入输出库(cstdio)进行同步,以确保二者之间的IO操作不会出现问题。但是,同步会带来一定的性能损失。
2024-01-23 13:14:24
2434
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅