深入详解如何使用Go实现端口扫描器
目录一、故事从一个"好奇"开始二、核心思路:生产者 + 消费者模型三、关键 Go 知识点解析1. goroutine:轻量级线程2. channel:安全通信管道3. sync.WaitGroup:等待所有任务完成4. net.DialTimeout:带超时的 TCP 连接5. 命令行参数解析6. 错误处理 & 输入校验四、运行效果预览五、完整源码奉上!六、结语:技术无罪,滥用 ...
GO语言zap日志库理解和使用方法示例
目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared Logger4. 定制logger4.1 将日志写入文件4.2 将JSON Encoder更改为普通的Log Encoder4.3 更改时间编码并添加调用者详细信息4.4 将日志输出到多个位置5. 使用Lumberjack进行日志切割文档5.1 安装5.2 zap logger种加入Lumberjack6 ...
一篇文章让你学会Go语言循环语句
目录概述for 循环1. for 循环基本语法2. for 循环的嵌套3. range 循环while 循环break 和 continue1. break2. continue总结概述
Go 语言是一种静态强类型、编译型、并发型编程语言。在编程中,循环语句是执行重复操作的重要手段。Go 语言提供了几种循环语句,包括 for 循环、while 循环和 break、continue 等跳转语句。本文 ...
golang zap日志库的具体使用
目录一、日志是什么二、 Sugared Logger vs Logger三、 zap的基本配置zap配置包含哪几方面四、 自定义loggercoreoptions五、 使用Lumberjack进行日志切割归档一、日志是什么
首先需要明确什么是日志
在程序运行的过程中,我们不可能总是能在控制台看到全部信息
因为
程序是黑盒运行的
一旦程序启动,内部状态、变量值、执行 ...
go语言基于Session和Redis实现短信验证码登录
目录基于 session 实现短信验证码登录短信验证码登录发送验证码用户登录创建用户登录拦截器数据脱敏Session 集群共享问题基于 Redis 实现短信验证码登录短信验证登录发送验证码用户登录创建用户配置登录拦截器基于 session 实现短信验证码登录
package main
import (
"fmt"
"log"
"math/rand"
...
Go语言中如何进行数据库查询操作
查询函数QueryRow和Query详细对比
特性QueryRowQuery返回值数量1个:*sql.Row2个:(*sql.Rows, error)错误处理时机在Scan()时处理立即处理 + 遍历后检查适用场景确定只有单行结果可能有多行结果资源释放自动管理必须手动调用rows.Close()结果遍历直接调用Scan()循环rows.Next() + rows.Scan()空结果处理返回sql.E ...
深入理解Go之==的使用
目录概述类型基本类型复合类型引用类型接口类型使用type定义的类型不可比较性谈谈map总结概述
相信==判等操作,大家每天都在用。之前在论坛上看到不少人在问 golang ==比较的结果。看到很多人对 golang 中==的结果不太了解。确实,golang 中对==的处理有一些细节的地方需要特别注意。虽然平时可能不太会遇到,但是碰到 ...
GO语言中gox交叉编译的实现
目录一、安装二、使用三、遇到的问题1、开启CGO2、修改环境变量最近在工作中使用GO语言进行编码开发,因为项目中的环境时arm64,所以总是需要交叉建议,在arm下才能正确运行,GO语言还是非常强大的,在windows下就可以交叉编译各个环境的二进制文件,Gox是Go交叉编译的一种简单,简洁的工具,其行为类似go build。
一、安装 ...
golang中gob的实现示例
Gob 是 Go 自己的以二进制形式序列化和反序列化程序数据的格式;可以在 encoding 包中找到。这种格式的数据简称为 Gob (即 Go binary 的缩写)。类似于 Python 的 "pickle" 和 Java 的 "Serialization"。
Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以及应用程序和机器之间的数据传输。它和 ...
go build 移除路径信息的实现步骤
用了一段时间的Golang之后,一直有个困惑,为什么报错的时候提示是这样的。
panic: 文件不存在
goroutine 1 [running]:
main.findFile(...)
/Users/Aries/Desktop/projec/main.go:4
main.main()
/Users/Aries/Desktop/projec/main.go:8 +0x3a
exit status 2
作为一名开发人员,总感觉不是那么安全和严谨。报错信息里包含 ...
Go 获取当前运行文件的目录的多种方法实现
目录概述方法一:使用os.Executable方法二:使用runtime.Caller方法三:处理go run特殊情况最佳实践建议高级技巧:处理符号链接总结概述
在Go语言开发中,经常需要获取当前执行文件的目录路径,这在进行配置文件加载、资源文件访问或日志文件存储等场景中尤为重要。本文将详细介绍几种可靠的方法来获取当前运行文件的目录路 ...
使用Redis实现轻量级消息队列
目录方式一 Redis Pub/Sub(适用于广播通知)方式二:Redis List(适用于任务队列)方式三:Redis Stream(推荐,支持持久化 + 消费组)总结使用消息中间件如RabbitMQ或kafka虽然好,但也给服务器带来很大的内存开销,当系统的业务量,并发量不高时,考虑到服务器和维护成本,可考虑使用Redis实现一个轻量级的消息队 ...
Go语言Mock单元测试的实现示例
目录一、为什么需要Mock测试?1. 依赖环境难搭建2. 测试结果不稳定3. 测试效率低且有风险二、Mock测试的核心原理明确测试目标与依赖关系1. 基于接口的依赖抽象2. 生成Mock对象并预设行为3. 注入Mock并验证测试结果三、项目中实现Mock测试需额外添加什么?1. Mock对象实现文件(如mocks.go)2. 测试用例文件(如shopping_tes ...
Go 语言中控制协程数量的常用方法小结
目录一、使用带缓冲的通道控制二、使用 sync.WaitGroup 配合通道三、使用工作池(Worker Pool)模式四、使用第三方库在 Go 语言中,协程(goroutine)是轻量级的执行单元,虽然开销小,但无限制地创建协程仍然会消耗大量系统资源,甚至导致程序崩溃。因此,合理控制协程数量是编写高效 Go 程序的关键。本文将介绍几种常用的 ...
go语言中GoMock的实现
目录安装开始使用参数匹配器GoMock是一个Go框架。它与内置的测试包整合得很好,并在单元测试时提供了灵活性。正如我们所知,对具有外部资源(数据库、网络和文件)或依赖关系的代码进行单元测试总是很麻烦。
安装
为了使用GoMock,我们需要安装gomock包github.com/golang/mock/gomock和mockgen代码生成工具github.com/golan ...
Golang使用elastic库来实现前后端模糊搜索功能
目录介绍工具后端前端快速入门先决条件实现思路运行测试注意事项介绍
使用go的elastic库来实现前后端模糊搜索功能的示例
工具
后端
connectrpc.com/connect:与前端通信connectrpc.com/cors:解决浏览器跨域google.golang.org/protobuf: API定义buf:生成go的apisqlc:与Postgres数据库交互github.com/elastic/go-elastics ...
Go 通道引用与close操作的实现
目录一、核心结论(先给答案,不绕弯)二、逐点拆解:把原理讲明白1. 通道是 “引用类型”,不是指针但行为类似2. close 操作作用于 “底层通道”,所有引用都会感知3. 内存泄露风险:几乎不存在,无需过度担心三、代码验证:直观感受引用与 close 的影响运行结果:结论验证:在 Go 开发中,通道(chan ...
go-redis Pipeline与事务的实现示例
目录1 背景与动机2 Pipeline:降低 RTT 的秘密武器2.1 基础用法2.2 自动化Pipelined()2.3 性能实测 & 调优3 事务:一次提交,全部成功3.1TxPipeline()基础3.2TxPipelined()回调3.3 事务 vs Lua 脚本4 乐观锁:Watch 机制剖析4.1 完整重试模型4.2 常见坑与最佳实践5 生产级 Checklist6 结语1 背景与动机
在高并发服务中,网 ...
golang中使用aes加密的过程
目录AES 加密基础生成密钥加密数据解密数据使用 GCM 模式(推荐)注意事项AES 加密基础
AES(Advanced Encryption Standard)是一种对称加密算法,适用于加密敏感数据。Golang 的 crypto/aes 包提供了 AES 加密的实现,通常结合 crypto/cipher 包使用。
生成密钥
AES 密钥长度需为 16(AES-128)、24(AES-192)或 32(AES- ...
Go log模块的使用技巧
目录Go log模块使用1.主要特性2. 基础日志输出2.1 基本日志方法2.2 错误处理日志3. 日志格式配置3.1 设置日志标志3.2 可用的日志标志4. 日志前缀配置4.1 设置日志前缀5. 文件日志输出5.1 将日志输出到文件5.2 文件打开模式说明6. 自定义Logger6.1 使用log.New()创建自定义Logger6.2 多个Logger实例7. 高级用法7.1 日志级别 ...