Golang
2025-10-13

这篇文章《Plugins in Go》深入探讨了在 Go 语言中实现插件机制的多种方式,尽管 Go 本身不支持运行时加载动态库。以下是文章的核心要点汇总:
🧩 为什么在 Go 中使用插件
- 虽然 Go 编译速度快,但某些应用仍需在运行时加载插件。
- 插件机制可以扩展应用功能,提升灵活性和可维护性。
✅ 理想插件架构的标准
- 速度:调用插件方法应尽可能快。
- 可靠性:插件应稳定运行,支持故障恢复。
- 安全性:防止篡改,例如通过代码签名。
- 易用性:插件 API 应简洁易懂。
🔄 插件运行方式对比
| 插件类型 |
优点 |
缺点 |
| 进程内插件 |
快速调用、部署简单、无需额外管理 |
插件崩溃可能影响主程序、语言受限(通常只能用 Go 编写) |
| 独立进程插件 |
崩溃隔离、安全性高、支持多语言、可动态启用/禁用 |
通信复杂、性能略低、需额外管理(如健康检查) |
🔧 Go 中的插件实现方式
-
通过 stdin/stdout 使用 RPC 通信
- 主程序启动插件进程,通过标准输入输出进行 RPC 通信。
- 示例:Pie 插件框架。
-
通过网络使用 RPC 通信
- 使用
net/rpc 在本地网络中连接插件。
- 示例:HashiCorp 的 go-plugin,功能强大,适合企业级应用。
-
通过消息队列通信
- 使用如 nanomsg 的 ReqRep 或 Survey 协议进行插件交互。
- 虽未有现成框架,但架构灵活,适合自定义实现。
-
编译时集成的进程内插件
- 插件作为 Go 包编译进主程序,常见于 HTTP 中间件。
- 优点是性能高,缺点是需重新编译主程序以更新插件。
-
脚本插件(解释执行)
- 使用嵌入式脚本语言(如 Lua、JavaScript)在运行时加载插件。
- 示例:GopherLua、Otto、Agora。
- 性能较低,但灵活性高。
🧪 示例代码概览
文章提供了一个基于 net/rpc 的简单插件系统示例,包括:
- 插件定义与注册
- 主程序启动插件进程并通过 RPC 调用方法
- 插件方法包括字符串反转和退出操作
ffmpeg
2025-10-12
Linux
2025-09-30
5 个提升 Linux 系统启动速度的 systemd 优化技巧,来自《5 systemd tweaks that really boost my boot time》。
不仅是减少启动秒数,更能提升系统响应速度,减少等待时间;通过分析、禁用、屏蔽和调优服务,可打造符合个人需求的流畅启动体验,且调整可逆,适合长期使用。
一、通过 systemd-analyze 定位启动慢的原因
- 工具作用:
systemd-analyze:显示内核和用户空间初始化的总时间,提供启动时间的宏观概览。
systemd-analyze blame:按服务启动耗时排序,列出具体服务的耗时明细,定位低效服务(如配置错误或无用的守护进程)。
systemd-analyze critical-chain:展示服务依赖关系链,识别阻塞关键任务的服务,为调整启动顺序提供依据。
- 操作建议:
- 多次运行分析工具,区分偶发异常(如硬件检测延迟)和持续低效服务,优先优化问题最突出的服务;保存分析结果以便对比优化效果。
二、禁用不必要的后台服务
- 优化逻辑:
- 许多 Linux 发行版默认启用冗余服务(如无打印机时的打印守护进程、无蓝牙硬件时的蓝牙管理器),禁用这些服务可减少启动耗时。
- 操作方法:
systemctl disable [服务名]:禁止服务随系统启动,需用时可手动启动;
systemctl mask [服务名]:彻底屏蔽服务(适用于确定完全不需要的服务),防止被意外启动。
- 注意事项:
- 避免盲目禁用服务,先确认服务功能及依赖关系;每次仅修改一项并测试,防止系统功能损坏。
三、利用 systemd 并行启动优化依赖关系
- 原理优势:
- systemd 支持服务并行启动(区别于传统 init 系统的串行启动),合理配置依赖可提升 CPU 和磁盘利用率。
- 优化方法:
- 通过
systemctl list-dependencies或查看单元文件,检查服务依赖关系,移除不必要的依赖(如使用After=或Requires=指令调整启动顺序);
- 启用“套接字激活”(socket activation):仅在套接字被访问时启动服务,减少启动时的服务加载量。
四、屏蔽可能被重新启用的服务
- 适用场景:
- 部分服务可能因软件更新或依赖关系被重新启用,屏蔽(mask)可确保其持续禁用(如与现有网络管理器冲突的网络守护进程)。
- 操作命令:
systemctl mask [服务名]:将服务绑定到/dev/null,阻止任何启动尝试;
systemctl unmask [服务名]:取消屏蔽。
- 注意点:
五、优化桌面会话启动流程
- 显示管理器调整:
- 更换为轻量级显示管理器(如 LightDM 比 GDM 启动更快),或调整现有管理器的配置以减少启动耗时。
- 自动启动应用管理:
- 在桌面环境中禁用不必要的自动启动程序(如云同步工具、更新助手),仅保留必需应用,加快桌面加载速度。
- 启动目标优先级调整:
- 延迟非关键服务的启动,优先加载桌面环境,使系统更快进入可用状态。
开发工具
2025-09-29
Ubuntu 上 VSCode 打不开,应该是哪里报错了。
没空折腾,就直接安装一个 Subline Text 满足基本文档编辑需求。
-> % wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo tee /etc/apt/keyrings/sublimehq-pub.asc > /dev/null
-> % echo -e 'Types: deb\nURIs: https://download.sublimetext.com/\nSuites: apt/stable/\nSigned-By: /etc/apt/keyrings/sublimehq-pub.asc' | sudo tee /etc/apt/sources.list.d/sublime-text.sources
Types: deb
URIs: https://download.sublimetext.com/
Suites: apt/stable/
Signed-By: /etc/apt/keyrings/sublimehq-pub.asc
-> % sudo apt update
-> % sudo apt search sublime
-> % sudo apt install sublime-text
- Ctrl + Shift + P,输入 Install Package Control
- Ctrl + Shift + P,输入 Package Control: Install Package,弹出来的搜索框中输入 ChineseLocalizations,选中点击安装。
- 几秒之后,等中文包安装好,UI 就换成中文显示了。
备注:快捷键
Shift + Alt + Up/Down: 多行编辑
统计 数据分析
2025-09-25
VSCode
2025-09-22
Windows WSL
2025-09-04
Cygwin 实在是有点太慢了,忍不了,研究好几次也没有解决慢的问题,切入 WSL2 了。
但是留意到打开 WSL 总有这个警告:
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
按照 CSDN 上的文章,在用户目录下创建 .wslconfig:
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
PS: 按照文档下面 4 个已经不再是实验性了,应该放在 wsl2 Section 下。
PS:后面三个 true 配置是默认值,不需要。
配置之后,在 cmd 中执行 wsl --shutdown 重启一下,果然就不报了,但是 WSL 中无法使用公司的 VPN 连接内网。
根据文档,networkingMode 有四种取值:
none 关闭网络连接
nat NAT,默认值
mirrored
virtioproxy 使用 VirtioProxy 网络代理
发现只有 mirrored 配置才不打印警告信息,但是就是不能使用 VPN。
[wsl2]
networkingMode=mirrored
算了,还是忍忍吧。
Email
2025-08-17
谷歌(Gmail)和苹果(Apple iCloud)
Gmail: Primary(主要) Social(社交) Updates(动态) “Forums(论坛) Promotions(推广)
Apple: Primary(主要) Transactions(交易) Updates(更新) Promotions(推广)
Gmail 和 Apple 分类比较类似:
- 主要:个人邮件
- 更新/动态:资讯、订阅
- 推广:营销邮件
不同的是,谷歌搞了一个社交与论坛,因为他们有这方面的业务。
苹果则是单独列了一个交易,将订单、物流等邮件单独管理。
微软(Outlook)
这个归类方式就比较简单,可能和微软的在线业务不够丰富、市场占有率不够高(和谷歌、苹果相比)有关。
总结
这个分类就收益于 AI 的出现,体现了 ISP 对电子邮件内容的控制程度的升高。
育儿
2025-07-27
阳历、阴历、阴阳历
- 公历(阳历):源于儒略历(公元前 45 年,由罗马皇帝凯撒推行),后演变为格里历(1582 年,由教皇颁布)。
- 农历(阴阳历):兼顾太阳与月亮的运转规律,同时融入反映农作时间的二十四节气。
- 伊斯兰历(阴历):是目前广泛使用的唯一纯阴历,与回归年偏差较大(例如今年元旦在冬季,数十年后元旦可能出现在夏季)。
- 该历法以伊斯兰教先知穆罕默德于公元 622 年从麦加迁徙至麦地那为元年,为世界穆斯林通用,在中国亦被称为回历(是回族采用的传统历法)。
置闰规则
- 公历:通过加入闰日实现闰年,每 4 年设一个闰日;若年份能被 100 整除,则不视为闰年。
- 农历:闰年通过加入闰月实现。
- 伊斯兰历:以加入闰日设置闰年,30 年中有 11 年为闰年,平年 354 天,闰年 355 天。
二十四节气
由于二十四节气是按照太阳的运行规律来划分的(太阳在黄道(地球围绕太阳公转的轨道)上的位置),用于指导农作,所以与公历日期相对固定(前后相差 1-2 天)。
将一个回归年 365 天均分为 24 等分,也就是每个节气 15 天。
| 节气 |
公历日期范围 |
含义(简要) |
| 立春 |
2 月 3-5 日 |
春季开始,万物复苏。 |
| 雨水 |
2 月 18-20 日 |
气温回升,降雨增多,利于作物生长。 |
| 惊蛰 |
3 月 5-7 日 |
春雷始鸣,冬眠动物苏醒。 |
| 春分 |
3 月 20-22 日 |
昼夜平分,春季过半。 |
| 清明 |
4 月 4-6 日 |
天气清朗,草木繁茂,扫墓祭祖时节。 |
| 谷雨 |
4 月 19-21 日 |
雨水充足,谷类作物茁壮成长。 |
| 立夏 |
5 月 5-7 日 |
夏季开始,万物进入生长旺季。 |
| 小满 |
5 月 20-22 日 |
北方麦类灌浆饱满,南方夏收作物即将成熟。 |
| 芒种 |
6 月 5-7 日 |
麦类成熟收割,晚稻等作物播种,“忙种”之意。 |
| 夏至 |
6 月 21-22 日 |
白昼最长,黑夜最短,盛夏开始。 |
| 小暑 |
7 月 6-8 日 |
天气炎热,但未到最热。 |
| 大暑 |
7 月 22-24 日 |
一年中最热的时期,高温多雨。 |
| 立秋 |
8 月 7-9 日 |
秋季开始,气温逐渐下降。 |
| 处暑 |
8 月 22-24 日 |
暑气结束,天气转凉。 |
| 白露 |
9 月 7-9 日 |
气温降低,早晚露水凝结成白色。 |
| 秋分 |
9 月 22-24 日 |
昼夜再次平分,秋季过半。 |
| 寒露 |
10 月 8-9 日 |
气温更低,露水带寒意,即将入冬。 |
| 霜降 |
10 月 23-24 日 |
开始出现霜冻,作物需防冻。 |
| 立冬 |
11 月 7-8 日 |
冬季开始,万物收藏。 |
| 小雪 |
11 月 22-23 日 |
气温下降,开始降雪,但雪量较小。 |
| 大雪 |
12 月 6-8 日 |
雪量增多,气温显著降低。 |
| 冬至 |
12 月 21-23 日 |
白昼最短,黑夜最长,寒冬来临,此后白昼渐长。 |
| 小寒 |
1 月 5-7 日 |
天气寒冷,但未到最冷。 |
| 大寒 |
1 月 20-21 日 |
一年中最冷的时期,寒风凛冽。 |
物理
2025-07-26
根据粒子物理学的标准模型,基本粒子是构成物质的最基本单元,可分为费米子(构成物质)和玻色子(传递相互作用)两大类。以下是 17 种基本粒子的分类及简介:
一、费米子(物质粒子)
费米子是构成物质实体的基本粒子,自旋为半整数,遵循泡利不相容原理,共 12 种。
-
夸克(6 种)
- 上夸克(u):电荷 +2/3,质量最轻,构成质子和中子。
- 下夸克(d):电荷 -1/3,与上夸克共同组成原子核。
- 粲夸克(c):电荷 +2/3,质量约 1.27 GeV,存在于高能粒子碰撞中。
- 奇夸克(s):电荷 -1/3,参与形成 K 介子等。
- 顶夸克(t):电荷 +2/3,质量最大(约 172 GeV),寿命极短。
- 底夸克(b):电荷 -1/3,质量约 4.2 GeV,常见于 B 介子。
-
轻子(6 种)
- 电子(e⁻):电荷 -1,参与化学反应与电流传导。
- μ 子:电荷 -1,质量约为电子的 207 倍,不稳定。
- τ 子:电荷 -1,最重的轻子(质量约 1.78 GeV),迅速衰变。
- 电子中微子(νₑ)、μ 子中微子(νμ)、τ 子中微子(ντ):电中性,质量近乎为零,几乎不与物质作用(“幽灵粒子”)。
二、玻色子(作用力粒子)
玻色子传递基本相互作用,自旋为整数,共 5 种(胶子虽为 8 种但归为 1 类):
-
规范玻色子(传递基本力)
- 光子(γ):传递电磁力,无质量,电荷为零,形成光与电磁波。
- 胶子(g):传递强力,无质量,通过“色荷”束缚夸克(共 8 种,但作为一类)。
- W⁺/W⁻ 玻色子:传递弱力,质量约 80.4 GeV,导致原子衰变。
- Z⁰ 玻色子:传递弱力,质量约 91.2 GeV,电中性。
-
希格斯玻色子(H⁰)
- 通过希格斯场赋予其他粒子质量,自旋为 0,质量约 125 GeV/c²(2012 年由 LHC 发现)。
三、总结:17 种基本粒子列表
| 类别 |
粒子 |
数量 |
作用 |
| 夸克 |
u, d, c, s, t, b |
6 |
构成质子、中子等强子 |
| 轻子 |
e⁻, μ⁻, τ⁻, νₑ, νμ, ντ |
6 |
电子参与化学,中微子穿透性强 |
| 规范玻色子 |
γ, g, W⁺, W⁻, Z⁰ |
5 |
传递电磁、强、弱力 |
| 希格斯粒子 |
H⁰ |
1 |
赋予其他粒子质量 |
注:
- 标准模型中,胶子实际有 8 种(对应强力的“色荷”组合),但通常归为 1 类。
- 引力子(传递引力)尚未被实验证实,未计入标准模型。
- 反粒子(如正电子)未单独列出,因它们与对应粒子质量相同、电荷相反。
四、超出标准模型的候选粒子
尽管标准模型已解释绝大多数现象,但以下粒子可能存在于更深层理论中:
- 暗物质粒子(如轴子、WIMP):占宇宙物质的 27%,尚未直接探测。
- 超对称粒子:理论预言每个标准模型粒子存在一个超对称伙伴(如“超电子”)。
- 引力子:量子引力理论中的假设粒子。
未来实验(如更高能对撞机、中微子观测)或将揭示新物理规律。