|
1 |
| -# 两周,从零基础到做出一个 Go 项目 |
| 1 | +最近在学习 Go 语言,语法看得差不多了,想着找点什么项目做做,正好我一直想做一个「局域网PC与手机互传文件,且不想借助微信/QQ等骚扰软件」的软件,于是就用 Go 来做了,最终截图如下: |
| 2 | + |
| 3 | + |
| 4 | + |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | +功能很简单: |
| 10 | +1. PC 上传文字或文件后创建二维码,提供给手机浏览器扫码下载 |
| 11 | +2. 手机在浏览器上传文字或文件后自动用 websocket 通知给 PC 端,弹出下载提示 |
| 12 | + |
| 13 | +这里主要说一下实现思路。 |
| 14 | + |
| 15 | +# 实现思路 |
| 16 | + |
| 17 | +## 用 Loca 创建窗口 |
| 18 | + |
| 19 | +我了解到 Go 的如下库可以实现窗口: |
| 20 | + |
| 21 | +1. [lorca](https://github.com/zserge/lorca) - 调用系统现有的 Chrome/Edge 实现简单的窗口,UI 通过 HTML/CSS/JS 实现 |
| 22 | +2. [webview](https://github.com/webview/webview) - 比 lorca 功能更强,实现 UI 的思路差不多 |
| 23 | +3. [fyne](https://github.com/fyne-io/fyne) - 使用 Canvas 绘制的 UI 框架,性能不错 |
| 24 | +4. [qt](https://github.com/therecipe/qt) - 更复杂更强大的 UI 框架 |
| 25 | + |
| 26 | +我随便挑了个最简单的 Lorca 就开始了。 |
| 27 | + |
| 28 | +## 用 HTML/CSS/JS 制作 UI |
| 29 | + |
| 30 | +我用 React + ReactRouter 来实现页面结构,文件上传和对话框是自己用原生 JS 写的,UI 细节用 CSS3 来做,没有依赖其他 UI 组件库。 |
| 31 | + |
| 32 | +Lorca 的主要功能就是展示我写的 index.html。 |
| 33 | + |
| 34 | +## 用 [gin](https://github.com/gin-gonic/gin) 实现后台接口 |
| 35 | + |
| 36 | +index.html 中的 JS 用到了五个接口,我使用 gin 来实现: |
| 37 | + |
| 38 | +``` |
| 39 | +router.GET("/uploads/:path", controllers.UploadsController) |
| 40 | +router.GET("/api/v1/addresses", controllers.AddressesController) |
| 41 | +router.GET("/api/v1/qrcodes", controllers.QrcodesController) |
| 42 | +router.POST("/api/v1/files", controllers.FilesController) |
| 43 | +router.POST("/api/v1/texts", controllers.TextsController) |
| 44 | +``` |
| 45 | + |
| 46 | +其中的二维码生成我用的是 [go-qrcode](https://github.com/skip2/go-qrcode)。 |
| 47 | + |
| 48 | +## 用 [gorilla/websocket](https://github.com/gorilla/websocket) 实现手机通知 PC |
| 49 | + |
| 50 | +这个库提供了一个聊天室的例子,稍微改一下就能为我所用了。 |
| 51 | + |
| 52 | +## 整体思路 |
| 53 | + |
| 54 | +总得来说: |
| 55 | + |
| 56 | +1. 用 Lorca 搞出一个窗口 |
| 57 | +2. 用 HTML 制作界面,用 JS 调用后台接口 |
| 58 | +3. 用 Gin 实现后台接口 |
| 59 | +4. 上传的文件都放到 uploads 文件夹中 |
| 60 | + |
| 61 | +共 400 行 Go 代码,700 行 JS 代码。 |
| 62 | + |
| 63 | +# 使用 |
| 64 | + |
| 65 | +目前我只测试了 Windows 系统,能正常运行。理论上 macOS 和 Linux 也能运行,但我并没有测试。 |
| 66 | + |
| 67 | +你可以在 [releases 页面](https://github.com/FrankFang/synk/releases) 下载可执行文件,也可以自行编译源代码得到可执行文件。 |
| 68 | + |
| 69 | +## Windows 用户须知 |
| 70 | + |
| 71 | +Windows 用户需要在防火墙的入站规则中运行 27149 端口的连接,否则此软件无法被手机访问。 |
| 72 | + |
| 73 | +# 编译 |
| 74 | + |
| 75 | +``` |
| 76 | +./scripts/build_for_mac.sh |
| 77 | +./scripts/build_for_win.sh |
| 78 | +``` |
2 | 79 |
|
3 |
| -大家好,我是一名 Go 语言的新手 |
|
0 commit comments