最近这两个月,我几乎把所有的业余时间都砸在了这个叫 ClipCascade Go 的项目上。
作为一个每天在 Mac、Windows 和 Android 手机之间反复横跳的开发者,我深受“同步”之苦。虽然市面上有各类工具,但总觉得差点意思:要么是 Electron 写的,开两个就占我 1GB 内存;要么是闭源的,我的剪贴板里可全是代码、密钥和私密文本,交给别人的服务器实在睡不着觉。
于是,我决定自己撸一个。这一撸,就是两个月。
一句话介绍它:在多台设备之间同步文本、图片、文件,让跨设备复制粘贴尽量接近“本机体验”。
我做这个项目的起点很简单: 工作里经常在 Mac、Windows、win-游戏机、Android 之间切换,复制一段文本、一个截图、一个小文件,来回传输非常碎片化。AirDrop、聊天工具、网盘都能解决一部分问题,但都不够“剪贴板化”。我想要的是:复制后就能在另一台设备直接感知到内容变化,不需要额外动作。
那么这一时刻问题来了,我只有两个微信如何在三台电脑中间中转呢?

添加图片注释,不超过 140 字(可选)
第一阶段:逃离 Electron 的“泥潭”
最开始,我也想过用 Web 技术栈,毕竟快。但当我看到一个空白的 Electron 窗口就要吃掉我几百 MB 内存时,老派程序员的执念让我退缩了。
我选择了 Go。
第一个月,我几乎都在构建底层的协议逻辑。我放弃了复杂的中间件,选用了 Fiber 这种极致性能的框架作为服务端。为了保证安全,我没有直接传明文,而是搞了一套基于 AES-256-GCM + PBKDF2 的加密方案。
但我遇到了第一个大坑:如何处理大文件?
如果你复制了一个几百 MB 的日志文件,甚至是几个 GB 的安装包,剪贴板工具如果傻傻地立刻读取、上传、下载,那你的系统会瞬间卡死,网络也会被占满。
第二阶段:突破!“懒加载”与 P2P 的碰撞
在项目进行的第二个月,我实现了一个现在非常自豪的功能:“懒加载 (Lazy Loading)”传输架构。
既然剪贴板同步追求的是“无感”,那为什么非要立刻传输实体内容呢? 我想出了一个办法:当你按下 Ctrl+C 时,ClipCascade 只广播一个极其精简的“占位符”(包含文件名、大小、哈希值)。只有当你来到另一台设备,真正按下 Ctrl+V 的那一刻,两台机器才会通过 P2P (WebRTC) 握手,开始实时的数据分块传输。
这样做的效果是:
- 零内存占用:复制一个 20MB 的文件,客户端内存占用几乎没波动。
- 闪电广播:无论多大的内容,同步通知都是毫秒级完成。
为了搞定内网穿透(P2P 直连),我埋头写了很久的 STUN 穿透逻辑。看到两台设备在没有服务器介入的情况下,以满带宽的速度对传数据时,那种快感是无与伦比的。
第三阶段:跨平台的“终极决战”
最后半个月,我把目标瞄准了 UI。
原本我用的是原生 Android 壳和 Windows CGO 绑定,但维护起来太痛苦了,交叉编译简直是噩梦。 为了追求极致的纯粹,我做了一个大胆的决定:全线重构,改用 Fyne.io。
现在的 ClipCascade 桌面 UI 和移动端,都是 100% 纯 Go。这意味着:
- Android APK 只有 25MB:由于剔除了多余的本地架构,它比绝大多数跨平台 App 都要小。
- Mac 上一键编译 Windows:再也不用为了打个 Win 的包去虚拟机里折腾环境了。
写在最后:它能为你解决什么?
如果你也像我一样,讨厌臃肿,极其看重隐私,想要:
- Mac 复制,Win 粘贴(文字、图片、文件全支持)
- 手机直连,剪贴板双向同步
- 数据都在自己手里,私有化部署
- 极度丝滑,几乎不占系统资源
那么,请一定要试试这个我磨了两个月的作品。
话不多说,原神启动:
服务端

添加图片注释,不超过 140 字(可选)
客户端 1

添加图片注释,不超过 140 字(可选)
客户端 2
释,不超过 140 字(可选)
手机端

那么这么棒的软件,它有没有带 UI 端的? 有的兄弟 包有的, PC 端这里也有 UI 的部分,而且都附带网络自动发现。

GitHub 地址 (开源 & 求 Star): github.com/NOBB2333/Cl…
写代码是一件纯粹的事,希望这款工具能让你的开发生活也变得纯粹一点。也欢迎大家来提 Issue 或 PR,我们一起把它做得更好!
#Go 语言 #开源项目 #剪贴板同步 #生产力工具 #程序员笔记