分类下相关文章
2025-12-11 · 阅读 153 · 字数 840
用 golang gin static 实现了一个文件下载功能,同时下载前需要先鉴权。例如: // serve /download under a group that enforces token validation g := r.Group("/download") g.Use(DownloadAuthMiddleware()) g.Static("/", downloadPath) DownloadAuthMiddleware 是一个中间件,会判断文件下载链接中的 token 参数是否过期。 这个加载功能,在本地开发环境是一切正常的,但是到了线 ...
2025-12-06 · 阅读 226 · 字数 2049
Golang 最爽的一点是,可以打包时将静态文件 embed 进二进制文件中,部署时只需一个可执行文件,极大简化了部署流程。 例如,网站的 js 和 css 文件,可以 embed 进二进制文件中,而无需发布时再额外拷贝一堆静态文件。 但是,最近我发现了一个浏览器缓存问题! 😓 问题现象 今天早晨,我还没起床,突然想看看最新开发的一个网页版手机租金计算器是否能在微信里正常打开,主要是担心微信对某些 js 特性的支持不好。 结果发现,页面一片空白,但是刷新了几次就正常了。有点懵,打开阿里云 ESA 的请求日志,发现访问 css 文件时,每次都回源站请求。 其中一次源站没有响应,导致页面空白。这 ...
2025-11-25 · 阅读 288 · 字数 488
需求背景 我有两个 MySQL 数据表: 员工表 staff 薪资表 salary。这里有员工 ID 字段作为外键关联员工表。 我定义的薪资 Struct 结构体,包含了 embedded 字段 Staff,用于关联员工信息: type Salary struct { gorm.Model StaffId uint Staff Staff `gorm:"foreignKey:StaffId"` Amount float64 } 我需要在返回薪资信息列表时,同时返回员工的详细信息(通过 Preload 预加载实现),并且根据员工的某些字段进行过滤(通过 L ...
2025-11-09 · 阅读 371 · 字数 662
最近在使用 Go 开发一个新闻发布的模块,但是我为了急于看到界面效果,不想先实现后台录入功能, 想先自动创建一批测试数据,直接看 UI 效果。于是找了一个自动生成测试数据的库。 go-faker https://github.com/go-faker/faker 非常适合网站的新闻模块或者博客模块,需要批量创建几百条测试数据的场景。也支持姓名,邮箱,手机号,IP 地址之类的数据类型。之前还专门写过一个小程序来生成测试数据,参考:随机生成身份证号,手机号,邮箱地址的微信小程序。 印象中 PHP Laravel 框架本身就内置了这个功能,但是 golang gin 还是太简陋了,需要自己动手实现。 ...
2025-10-12 · 阅读 427 · 字数 1089
周末继续 Golang Gin 重构 PHP 的 Magento 电商网站。其中一个需要重构的功能是网站地图 sitemap.xml 文件的生成。 之前做的网站普遍简单,很少超过上万个产品或者文章。而电商类的服务,例如 magento 通常需要导入几十万甚至上百万的产品信息。那么就需要注意一下 sitemap.xml 的配置规范。 golang 三方库 https://github.com/sabloger/sitemap-generator 虽然 Star 数只有 40 个,但是看起来文档还挺详情,准备测试一下。 > go get github.com/sabloger/sitemap ...
2025-09-01 · 阅读 907 · 字数 934
需求 之前开发的大赛报名网站终于进入了收尾阶段,比赛已结束,现在需要把参赛选手上传的资料及视频文件导出,做备份。 正好借此机会了解一下如何在 golang gin 项目中添加一堆命令行工具。 为何要引入 cmd 目录 之前把导出数据的功能,都放到了 gin API 接口中,然后通过 swagger 的文档管理界面调用,再保存。 但是,这样搞有个坏处,就是导致 swagger 文档中,会多出很多不需要前端使用的接口。 此外,像视频批量导出这样需要长时间执行的功能,需要更多详情日志的场景,也不适合放到 API 接口中。 所以,我需要将这些功能从 HTTP API 接口中剥离出来,放到单独的命令行工 ...
2025-08-26 · 阅读 1046 · 字数 1132
今天,继续昨天的系列 Golang JWT 库升级,RegisteredClaims 取代 StandardClaims。 不得不说,golang-jwt/jwt 官方文档太晦涩了,很多细节都需要自己去探索。 RegisteredClaims 过期时间的设置 之前的 StandardClaims 的 exp 字段是 int64 类型,表示 Unix 时间戳。例如: claims["exp"] = time.Now().Add(time.Second * sec).Unix() // 废弃 ⚠️ 但是,最新的 RegisteredClaims 的 exp 字段(Expi ...
2025-08-26 · 阅读 1055 · 字数 1928
最近在升级 golang jwt 依赖库时,发现 dgrijalva/jwt-go 已经废弃,现在变成了 golang-jwt/jwt。 升级的后,代码各种报错,原本内置的 StandardClaims 不见了,取而代之的是 RegisteredClaims。 今天下午从酒店干苦力回来,又累又困,扛不住眯了一会,也没有兴致写业务逻辑了。干脆把新增的 RegisteredClaims 结构体了解了一下。 JWT Token 是我刚开始接触 golang 时,就用的一个库。现有项目的 JWT Token 逻辑也是大概 5 年前写的, 一直没有更新过。一个最初写的小程序后台服务,就包含这个模块,稳定 ...
2025-07-31 · 阅读 951 · 字数 533
用 Golang Walk 开发了一个 Windows GUI 应用程序,用于批量生成决赛证书。 基础功能已经完成。目前唯一的遗憾是应用程序没有图标。为了让这个应用程序看起来更专业,我决定为它添加一个图标。 先看最终效果: 显示效果 重新生成 syso 文件 参考 Github 上的一个套路: https://github.com/lxn/walk/issues/361 首先去 iconfont 网站下载一个免费的图标文件,然后将其转换为 ICO 格式。可以使用在线工具或软件来完成这个转换。 然后将生成的 ICO 文件放在项目目录下,例如 main.ico。 重新生成 syso 文件,使用以 ...
2025-07-31 · 阅读 1149 · 字数 621
继续使用 Golang Walk 开发批量生成图片的 Windows 桌面客户端。 但是,要一次性生成几百张图片时,界面会卡死,无法响应用户操作。😅 哈哈,感觉非常像 Android 开发中的 ANR(Application Not Responding)问题。估计也是新开一个类似 kotlin 的协程来处理长时间运行的任务。 对于 Golang 来说就是使用 Goroutine 来处理长时间运行的任务。 ANR 问题 Golang Walk 对于长时间运行的任务,点击按钮后,如何保证界面不会卡死,而且能实时更新 textedit 中的内容呢? 解决方案: 使用 Goroutine:将长时 ...
2025-07-30 · 阅读 1326 · 字数 1201
之前用 Golang 开发了一个服务器端批量生成大赛获奖证书图片的功能。参考前文(Golang 批量生成获奖证书图片时的字体问题汇总) 然后,不出所料,上线后就被用户反馈有 Bug。哎,做个好人真难,干得越多,出 Bug 越多。 Bug 现象 生成的证书图片,涉及到数字下标的一律不显示。例如二氧化碳的下标 2 就不见了,CO₂ 显示成 CO 😅 有些字缺笔画。例如,飘逸的逸字,缺少了兔子的点。那个字我就不认识了。 有些中文简体字显示成了繁体字 Bug 分析 第一个问题,我还能理解,可能字符支持的不全;但是第二个我就不能理解了。 后来,我看了一下思源字体的属性 可以看到,作者是日本人,这就 ...
2025-07-29 · 阅读 1321 · 字数 954
想开发一个简单的 Windows GUI 应用,实现证书图片的批量生成功能。 选择 Golang 开发 Windows GUI 的原因 尝试了一圈 WPF, React Native for Windows, 我感觉还是 Golang 开发更顺手一些。 不常写 C#,一段时间不写,语法就忘了。 而且这个证书图片的生成功能,我已经用 Golang Gin 实现了一套服务端的接口。 现在只需要把这部分代码移植到 Windows GUI 上就可以了。 使用 Golang Walk 库 也调研了其他的 Golang GUI 库: Fyne:依赖较多,而且我运行不起来 Wails: WebView2 ...
2025-07-28 · 阅读 917 · 字数 723
在使用 Golang 的 gg 库批量生成获奖证书图片时,遇到了一些字体相关的问题。主要涉及: 字体是否免费,防止被律师函警告 otf 与 ttf 字体文件的区别 gg 库对 otf 字体文件的支持问题 字体文件的各种后缀的区别 下面逐一记录。 思源黑体和思源宋体是免费的么 思源黑体(Source Han Sans)和思源宋体(Source Han Serif)都是开源字体。它们是免费的,可以在个人和商业项目中使用。遵循 Apache 许可证,可以自由使用和分发。 otf 与 ttf 的区别 ttf 是 TrueType Font 的缩写,它支持矢量图形,具有较好的跨平台兼容性。 otf ...
2025-06-12 · 阅读 1035 · 字数 591
这两天在用 golang 开发一个论坛的后端接口,遇到了一个 XSS 攻击的场景。 发帖时,前端传递过来的 Content 是 html,经测试发现,如果不对 html 内容进行清理,会导致 XSS 攻击。😰 即,帖子内容中包含了恶意的 js 代码,攻击者可以通过这个 js 代码来窃取用户的 cookie 或者执行其他恶意操作。 什么是 XSS 攻击? XSS(Cross-Site Scripting)攻击是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得这些代码在其他用户的浏览器中执行,从而窃取用户信息、劫持会话等。 XSS 攻击通常发生在用户输入未经过滤或清理的情况下,攻击 ...
2025-05-30 · 阅读 1240 · 字数 1879
昨晚接到紧急需求,需要增加一个搜索功能。当时在家里,感觉很简单的需求, 随便改改,直接发布到线上服务器就行,毕竟我大 golang 只要能编译通过,基本不会有大问题 😏。 但是,不出意外,出了意外。自动发布脚本,在重启 systemd 服务后, 使用 systemctl status 查看状态,发现 golang 服务没有启动成功。 通过命令行单独启动 go 服务,发现报错: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found 还好,我发布前,将可执行程序备份了一份。。。挂了一分钟,我就悄悄恢复了,险些提桶跑路。 ...
| 生活 | 跑步 清单 足球 鲁班 探索 孤独的美食家 驾驶 电视剧 收纳 奶爸 健康 game 电影 周末 joke |
|---|---|
| Geek | 健身 Laravel Git Vim MySQL Linux UI Windows SVN 纪录片 管理 Shell 游记 工具 手机 BackboneJS 自建博客 Mac DNS Tornado CDN Django Python AngularJS 理财 前端 Nginx 爬虫 Redis Javascript Browser 浏览器 推广 OAuth CSS PHP Social Networks 安全 运维 创业 杂记 VueJS Android Image IDE Java ReactJS 数据分析 SQLite RESTful 读书笔记 家电 ecshop Vagrant wordpress docker SEO GTD magento mongodb nodejs weex 冷知识 ruby iOS 微信小程序 AI CMS 快应用 backpack 广告联盟 OA 短信 UWP Win CSharp Tampermonkey graphviz 钉钉 WPS 数据字典 微信公众号 Fuchsia Adobe XD SQL Server thinkphp 代码规范 商业模式 Flutter 头痛的问题 serverless 视频制作 国际化 golang 服务器 Kotlin 网站建设 5G 笔记本 图片 spark spring 物联网 InfluxDB 图像识别 postgre rust 提示词 |
| 成长的烦恼 | 闲言碎语 待产 不睡觉 写作 程序员 孙心然语录 原则 大鸿语录 |
| 地球 | 植物 时间 中文 赚钱 国家地理 烟台 一生伏首拜阳明 emoji 弟子规 英文 国际贸易 |