golang

分类下相关文章

Golang Walk 增加 Windows 应用图标

用 Golang Walk 开发了一个 Windows GUI 应用程序,用于批量生成决赛证书。 基础功能已经完成。目前唯一的遗憾是应用程序没有图标。为了让这个应用程序看起来更专业,我决定为它添加一个图标。 先看最终效果: 显示效果 重新生成 syso 文件 参考 Github 上的一个套路: https://github.com/lxn/walk/issues/361 首先去 iconfont 网站下载一个免费的图标文件,然后将其转换为 ICO 格式。可以使用在线工具或软件来完成这个转换。 然后将生成的 ICO 文件放在项目目录下,例如 main.ico。 重新生成 syso 文件,使用以 ...

阅读全文...

Golang Walk 通过 Goroutine 处理长时间运行的任务,避免界面卡死

继续使用 Golang Walk 开发批量生成图片的 Windows 桌面客户端。 但是,要一次性生成几百张图片时,界面会卡死,无法响应用户操作。😅 哈哈,感觉非常像 Android 开发中的 ANR(Application Not Responding)问题。估计也是新开一个类似 kotlin 的协程来处理长时间运行的任务。 对于 Golang 来说就是使用 Goroutine 来处理长时间运行的任务。 ANR 问题 Golang Walk 对于长时间运行的任务,点击按钮后,如何保证界面不会卡死,而且能实时更新 textedit 中的内容呢? 解决方案: 使用 Goroutine:将长时 ...

阅读全文...

血泪教训,中文慎用思源字体,还是阿里的字体更靠谱

之前用 Golang 开发了一个服务器端批量生成大赛获奖证书图片的功能。参考前文(Golang 批量生成获奖证书图片时的字体问题汇总) 然后,不出所料,上线后就被用户反馈有 Bug。哎,做个好人真难,干得越多,出 Bug 越多。 Bug 现象 生成的证书图片,涉及到数字下标的一律不显示。例如二氧化碳的下标 2 就不见了,CO₂ 显示成 CO 😅 有些字缺笔画。例如,飘逸的逸字,缺少了兔子的点。那个字我就不认识了。 有些中文简体字显示成了繁体字 Bug 分析 第一个问题,我还能理解,可能字符支持的不全;但是第二个我就不能理解了。 后来,我看了一下思源字体的属性 可以看到,作者是日本人,这就 ...

阅读全文...

Golang Walk 开发 Windows GUI 应用,Hello World 示例

想开发一个简单的 Windows GUI 应用,实现证书图片的批量生成功能。 选择 Golang 开发 Windows GUI 的原因 尝试了一圈 WPF, React Native for Windows, 我感觉还是 Golang 开发更顺手一些。 不常写 C#,一段时间不写,语法就忘了。 而且这个证书图片的生成功能,我已经用 Golang Gin 实现了一套服务端的接口。 现在只需要把这部分代码移植到 Windows GUI 上就可以了。 使用 Golang Walk 库 也调研了其他的 Golang GUI 库: Fyne:依赖较多,而且我运行不起来 Wails: WebView2 ...

阅读全文...

Golang 批量生成获奖证书图片时的字体问题汇总

在使用 Golang 的 gg 库批量生成获奖证书图片时,遇到了一些字体相关的问题。主要涉及: 字体是否免费,防止被律师函警告 otf 与 ttf 字体文件的区别 gg 库对 otf 字体文件的支持问题 字体文件的各种后缀的区别 下面逐一记录。 思源黑体和思源宋体是免费的么 思源黑体(Source Han Sans)和思源宋体(Source Han Serif)都是开源字体。它们是免费的,可以在个人和商业项目中使用。遵循 Apache 许可证,可以自由使用和分发。 otf 与 ttf 的区别 ttf 是 TrueType Font 的缩写,它支持矢量图形,具有较好的跨平台兼容性。 otf ...

阅读全文...

Golang 后端防御 XSS 攻击:用 bluemonday 让富文本发帖更安全

这两天在用 golang 开发一个论坛的后端接口,遇到了一个 XSS 攻击的场景。 发帖时,前端传递过来的 Content 是 html,经测试发现,如果不对 html 内容进行清理,会导致 XSS 攻击。😰 即,帖子内容中包含了恶意的 js 代码,攻击者可以通过这个 js 代码来窃取用户的 cookie 或者执行其他恶意操作。 什么是 XSS 攻击? XSS(Cross-Site Scripting)攻击是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本代码,使得这些代码在其他用户的浏览器中执行,从而窃取用户信息、劫持会话等。 XSS 攻击通常发生在用户输入未经过滤或清理的情况下,攻击 ...

阅读全文...

午夜惊魂,在家发版本,线上 golang 找不到 GLIBC 版本导致服务挂掉

昨晚接到紧急需求,需要增加一个搜索功能。当时在家里,感觉很简单的需求, 随便改改,直接发布到线上服务器就行,毕竟我大 golang 只要能编译通过,基本不会有大问题 😏。 但是,不出意外,出了意外。自动发布脚本,在重启 systemd 服务后, 使用 systemctl status 查看状态,发现 golang 服务没有启动成功。 通过命令行单独启动 go 服务,发现报错: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found 还好,我发布前,将可执行程序备份了一份。。。挂了一分钟,我就悄悄恢复了,险些提桶跑路。 ...

阅读全文...

golang gin 基于 Casbin 实现权限控制

最近在使用 golang gin 开发一套公司内部的人事管理系统,但是发现权限管理比之前搞的系统要复杂不少, 所以我想借机了解一下传说中的 Casbin 权限控制库,看看是否可以借鉴一下。 涉及权限控制的需求场景 人事部门负责人需要能看到所有的人事数据 人事部门的普通 HR,只能看到部分部门的人事数据。即只能看到自己负责的部门数据 IT 部门或者行政部门指定人员,能看到资产管理模块的数据。即每个员工有哪些名下资产,显示器,主机,桌子椅子之类的。方便离职时进行资产回收。 部门负责人能看到自己部门的所有员工数据,除了薪资相关的字段。且只有看的权限。不能修改和删除。 员工个人能通过企业微信的授权登 ...

阅读全文...

企业微信同步内部员工通讯录 golang 实现

基于自建应用、自有系统。 腾讯官方文档 概述 - 文档 - 企业微信开发者中心 https://developer.work.weixin.qq.com/document/path/90193 通讯录同步相关接口,可以对部门、成员、标签等通讯录信息进行查询、添加、修改、删除等操作。 企业如果需要从自有的系统同步通讯录到企业微信,需要使用通讯录同步secret。 自建应用、代开发应用、第三方应用在提供功能时,往往需要获取通讯录,开发者可查阅成员、部门、标签相关的接口说明。注意,自建应用、代开发应用、第三方应用仅能读取通讯录,不能编辑,且仅能读取可见范围内的通讯录。 2022年8月15日起,通过 ...

阅读全文...

Golang time.Parse 时区问题引起的时间比对 bug

使用 golang 开发的大赛报名截止时间功能,发现一个奇怪的 bug,就是截止时间判断不准确。 现象是,截止时间设置的是今天上午十点,但是判断函数只有在下午 18 点时才生效。 我第一反应是大概就是时区问题。 未指定时区前 now := time.Now() registerStartTime, err := time.Parse("2006-01-02 15:04:05", registerStart) registerEndTime, err := time.Parse("2006-01-02 15:04:05", registerEnd) fm ...

阅读全文...

golang gin 的管理后台多角色路由权限控制

使用 golang gin 实现一个前后端分离的后台管理系统,管理员分为: 普通管理员 超级管理员 超级管理员可以访问一些普通管理员没有权限访问的接口,同时即便同一个接口两种管理员都能访问,但是可以操作的资源不同。如何设计路由及中间件可以实现清晰简洁的权限管理呢? 例如,超级管理员是我的账号,而客户也能登录这个后台,即客户是普通管理员。我作为超级管理员可以看到后台所有的设备,而客户作为普通管理员只能看到自己所属的设备,且只能对自己的设备进行远程锁机,而不能对其他客户的设备进行操作。 我实在是懒得自己想了,就问了一下 DeepSeek。DeepSeek AI 给出的方案,确实比我目前用的单一 ...

阅读全文...

golang 开发 OA 系统,工作流引擎选型

我想开发一套企业内部使用 OA 系统,使用 golang gin 开发,让 AI 推荐了几个流程管理的库,即工作流引擎。 发现大部分找到的都是 Java Sprint Boot 的实现,但是我还是希望用 golang gin 去实现。毕竟 golang gin 目前用的最顺手,也积累了大量的内部功能库,而且服务器资源占用低。加上是集团内几个公司一块使用,使用现成的开源实现,也达不到要求,估计也很难改。还不如自己基于工作流引擎模块去自己实现。 但是看了几个感觉比较复杂。理解成本有点高,例如: GoFlow:Workflow 引擎, https://github.com/s8sg/goflow/ ...

阅读全文...

MySQL & golang gorm 按月份自动分表存储物联网设备日志

遇到一个存储大量在线设备日志的需求。设备日志通过 MQTT 上传,服务端使用 golang 订阅 MQTT 主题来获取日志,然后存储到 MySQL。之前,为了偷懒,使用了 InfluxDB 2 来存储这里时序数据,但是,经历了一个项目之后,我觉得还是 MySQL 好用。毕竟 influxdb 2.0 的查询语法很不习惯,而且我没有运维经验,这玩意要花时间去了解如何运维,这些时间花费的非常不值。能用最顺手的技术实现,而且稳定可靠,那么就不要折腾。 按照我的估算,按月存储日志,可以把每个表都日志量控制在 1000 万条以内,那么就不需要按天或按周存储了。 今天能把这个功能搞定,就很不错了。也算是设 ...

阅读全文...

golang xuri/excelize 导出 Excel 时,不指定列标号

今天在开发的系统,需要导出大赛参赛作品的所有打分结果。 此前的做法是,指定 Excel 的 Cell 标识,然后写入指定单元格。但是这种做法非常不容易维护,例如,要新增一列,插入到邮箱那列的前面,那么插入后,就需要对应的修改后面的每一列的编号,非常麻烦。 values := map[string]string{ "A1": "年份", "B1": "参赛队名", "C1": "省份", "D1& ...

阅读全文...

golang 通过 SMTP 服务发送邮件

要在服务器的后台接口上,增加一个发送邮件的接口。每天调用的频率也不高。 最终选择了这个库 https://github.com/go-gomail/gomail Star 4.5K,近十年没有更新了。。。但测试没有任何问题,而且也完全满足我的需求。 安装 > go get gopkg.in/gomail.v2 代码 package main import ( gomail "gopkg.in/gomail.v2" ) func main() { msg := gomail.NewMessage() msg.SetHeader("From&quo ...

阅读全文...