用 Go 通过 SMTP 发邮件用标准库 net/smtp 连接 QQ 邮箱发信的完整代码,包括授权码、PlainAuth 认证、收件人列表和中文标题的编码处理。2023-10-27技术笔记 / GoGo邮件SMTPnet/smtp
Go 零散笔记:格式化占位符、数组去重与环境变量平时写 Go 攒下的一堆小知识点:fmt 各种占位符的区别、数组去重、go env -w 和 export 的优先级、以及一些容易记错的语法细节。2023-09-21技术笔记 / Go笔记Gofmt切片
GORM 使用笔记:多对多、子对象与自增 ID记录使用 GORM 时遇到的几类问题:多对多关联保存、插入对象时子对象被自动创建、自定义主键生成、以及用 BeforeCreate 钩子统一处理。2023-08-15技术笔记 / Go数据库GoGORMORM
用 Go 定时拉取 Git 仓库的最新内容用 Go 起一个常驻进程,按固定间隔执行 git pull 并在内容有更新时做后续处理,附完整代码和作为服务运行的方式。2023-08-11技术笔记 / GoGitGo定时任务
Go 里哪些资源必须手动释放文件句柄、网络连接、HTTP 响应体、数据库连接、channel 等资源在 Go 里都不会自动回收,本文逐条列出必须 Close 的对象和正确的写法。2023-06-28技术笔记 / GoGo资源管理内存泄漏
用 logrus + lumberjack 做 Go 应用日志logrus 的分级日志与格式化输出,配合 lumberjack 实现按大小切割、按数量保留的日志轮转,以及怎么把日志同时写到文件和控制台。2023-06-14技术笔记 / GoGo日志logruslumberjack
用 Docker 做 cgo 交叉编译cgo 交叉编译最大的麻烦是本地缺目标平台的 C 工具链,用官方提供的交叉编译镜像挂载源码目录就能一次搞定。2023-05-18技术笔记 / GoDockerGocgo交叉编译
Go 结构体标签(Tag)的用法与常见坑结构体标签的语法、反射怎么读取,以及 json、gorm、validate 各自常用的标签写法与拼写错误导致的静默失效。2023-05-18技术笔记 / GoGo结构体Tag反射
Go 各数据库的连接字符串与连接池配置sqlite、MySQL、PostgreSQL 以及 InfluxDB 在 Go 里的连接字符串写法,并说明连接池的四个参数分别控制什么、怎么按业务设置。2022-12-01技术笔记 / Go数据库GoGORM连接池
把 Go 应用做成 systemd 系统服务systemd 是什么、unit 文件怎么写,以及把 Go 编译出来的二进制注册成开机自启、崩溃自动重启的系统服务的完整步骤。2022-09-21技术笔记 / GoLinuxsystemd部署Go
Go 里 time.Parse 和 Format 的时区坑time.Parse 默认按 UTC 解析,而 time.Format 输出用的是本地时区,两者不一致时时间会莫名其妙差几个小时,本文给出正确的处理方式。2022-02-23技术笔记 / Go时区Gotime
Go 好用的库与框架清单平时收集的 Go 开源库:websocket、进程管理、磁盘查看、内存数据库,以及 ORM 和 REST 框架的选型备忘。2022-01-20技术笔记 / Go工具Go开源库框架
Go 读取文件的四种方法(附取文件名的小技巧)os.ReadFile、bufio 逐行读、io.Copy 和文件切片,四种读文件的写法各自适合什么场景,以及从完整路径里取文件名、去后缀的常用函数。2022-01-18技术笔记 / GoGo文件iobufio
把 Go 代码编译成 DLL 给别的程序调用用 cgo 的 //export 注释把 Go 函数导出,编译成 Windows 的 DLL,并在 C# 等语言里调用,附编译命令和常见报错。2021-12-23技术笔记 / GoGoDLLcgoWindows
Go 业务开发常用的几个库:各自解决什么问题把 Go 业务开发里高频用到的几个库按用途分类讲清楚:Web 框架 Gin、日志 zap、JSON 序列化 jsoniter、ORM GORM、定时任务 robfig/cron、依赖注入 wire、协程池 ants,并说明各自的取舍与替代方案。2021-10-21技术笔记 / GoGo开源库框架选型
go-micro 微服务:用 consul 做服务发现consul 的安装与开发模式启动、go-micro 服务的注册与发现、以及本地调试时常见的健康检查失败问题。2021-09-02技术笔记 / Go微服务Gogo-microconsul
Go 的 context 到底怎么用:WithCancel、WithTimeout、WithValue从 Background 和 TODO 的区别讲起,用可运行的例子说明 WithCancel、WithDeadline、WithTimeout、WithValue 各自解决什么问题,以及为什么 context 要作为函数第一个参数往下传。2021-08-06技术笔记 / GoGocontext并发源码