Go内存泄漏问题 引言 Go 语言因其强大的并发特性和自动垃圾回收(GC)机制,受到广泛欢迎。然而,内存泄漏 依然是 Go 语言开发者需要关注的问题。虽然 Go 的 GC 可以自动管理内存,但如果代码中存在 不必要的引用、Goroutine 泄漏、资源未释放等问题,内存泄漏仍然可能发生,导致 程序性能下降 甚至 崩溃。 1. Go 语言的内存管理机制 在 Go 语言中,变量的内存主要分配在 栈(Stack) 和 2025-03-22 开发 #Go
viper的“陷阱” 第一个问题:SetConfigType()真的有用吗? 问题引入 当你使用如下方式读取配置时,viper会从./conf目录下查找任何以config为文件名的配置文件,如果同时存在./conf/config.json和./conf/config.yaml两个配置文件的话,viper会从哪个配置文件加载配置呢? 12viper.SetConfigName("config")vip 2025-02-20 开发 #Go
Go语言发送邮件 邮件协议 各种事物都有一个规范,也就是协议,比如我们在浏览器里面浏览网页,需要遵循各种网络协议,我们先来简单了解一下都有哪些协议 SMTP SMTP是 简单邮件传输协议,是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。它通常在 25、465、587 端口上运行。 另外 SMTP 协议属于TCP/IP协议簇 POP3 邮局协议的第3个版本,是因特网电子邮件的第一个离线 2025-01-12 开发 #Go
Git Commit 规范 git commit 规范 1. Commit 信息的基本格式 1234<type>(<scope>): <subject><body> # 可选<footer> # 可选 2. 详细说明 2.1. type(类型) 描述本次提交的性质,通常包括以下几类: 类型 描述 feat 新功能(feature) fix 修 2024-12-11 开发 #Git
数据结构 常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类。 分类 根据逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点和边构成,反映了复杂的网络关系。 逻辑结构可分为“线性”和“非 2024-12-04 算法 #算法
MySql事务 1. 事务的基础概念及ACID特性 1.1 什么是事务 事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务。 1.2 事务的四大特性(ACID) 原子性(Atomicity):事务是最小的执行单位,不可再分割。事务的操作要么全部成功,要么全部失败回滚。 一致性(Consis 2024-10-31 开发 #MySql
依赖注入 什么是依赖注入 依赖注入 (Dependency Injection,缩写为 DI),可以理解为一种代码的构造模式(就是写法),按照这样的方式来写,能够让你的代码更加容易维护。 在GO语言中,wire是由 google 开源的一个供 Go 语言使用的依赖注入代码生成工具。它能够根据你的代码,生成相应的依赖注入 go 代码。 而与其它依靠反射实现的依赖注入工具不同的是,wire 能在编译期(准确地说 2024-10-16 开发 #Go
Golang单机锁 sync.Mutex 核心机制 通过 Mutex 内一个状态值标识锁的状态,例如,取 0 表示未加锁,1 表示已加锁; 上锁:把 0 改为 1; 解锁:把 1 置为 0. 上锁时,假若已经是 1,则上锁失败,需要等他人解锁,将状态改为 0. 下面首先拎清两个概念: 饥饿模式:当 Mutex 阻塞队列中存在处于饥饿态的 goroutine 时,会进入模式,将抢锁流程由非公平机制转为公平机 2024-09-26 开发 #Go
trie树 定义 字典树,英文名 trie。顾名思义,就是一个像字典一样的树。 可以发现,这棵字典树用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。 举个例子,1→4→8→121→4→8→121→4→8→12 表示的就是字符串 caa。 实现 12345678910111213141516171819202122232425262728293031323334353637383940414 2024-08-06 算法 #算法
线段树 简介 线段树是算法竞赛中常用的用来维护 区间信息 的数据结构。 线段树可以在 O(logN)O (log N)O(logN) 的时间复杂度内实现单点修改、区间修改、区间查询(区间求和,求区间最大值,求区间最小值)等操作。 线段树将每个长度不为1的区间划分成左右两个区间递归求解,把整个线段划分为一个树形结构,通过合并左右两区间信息来求得该区间的信息。这种数据结构可以方便的进行大部分的区间操作。 过程 2024-07-26 算法 #算法