• Stars
    star
    105
  • Rank 326,275 (Top 7 %)
  • Language
    JavaScript
  • Created almost 3 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

最近在学习 Go 语言,语法看得差不多了,想着找点什么项目做做,正好我一直想做一个「局域网PC与手机互传文件,且不想借助微信/QQ等骚扰软件」的软件,于是就用 Go 来做了,最终截图如下:

image.png

image.png

image.png

功能很简单:

  1. PC 上传文字或文件后创建二维码,提供给手机浏览器扫码下载
  2. 手机在浏览器上传文字或文件后自动用 websocket 通知给 PC 端,弹出下载提示

这里主要说一下实现思路。

实现思路

用 Loca 创建窗口

我了解到 Go 的如下库可以实现窗口:

  1. lorca - 调用系统现有的 Chrome/Edge 实现简单的窗口,UI 通过 HTML/CSS/JS 实现
  2. webview - 比 lorca 功能更强,实现 UI 的思路差不多
  3. fyne - 使用 Canvas 绘制的 UI 框架,性能不错
  4. qt - 更复杂更强大的 UI 框架

我随便挑了个最简单的 Lorca 就开始了。

用 HTML/CSS/JS 制作 UI

我用 React + ReactRouter 来实现页面结构,文件上传和对话框是自己用原生 JS 写的,UI 细节用 CSS3 来做,没有依赖其他 UI 组件库。

Lorca 的主要功能就是展示我写的 index.html。

gin 实现后台接口

index.html 中的 JS 用到了五个接口,我使用 gin 来实现:

router.GET("/uploads/:path", controllers.UploadsController)              
router.GET("/api/v1/addresses", controllers.AddressesController) 
router.GET("/api/v1/qrcodes", controllers.QrcodesController)   
router.POST("/api/v1/files", controllers.FilesController)      
router.POST("/api/v1/texts", controllers.TextsController)

其中的二维码生成我用的是 go-qrcode

gorilla/websocket 实现手机通知 PC

这个库提供了一个聊天室的例子,稍微改一下就能为我所用了。

整体思路

总得来说:

  1. 用 Lorca 搞出一个窗口
  2. 用 HTML 制作界面,用 JS 调用后台接口
  3. 用 Gin 实现后台接口
  4. 上传的文件都放到 uploads 文件夹中

共 400 行 Go 代码,700 行 JS 代码。

如何使用

目前我只测试了 Windows 系统,能正常运行。理论上 macOS 和 Linux 也能运行,但我并没有测试。

你可以在 releases 页面 下载可执行文件,也可以自行编译源代码得到可执行文件。

Windows 用户须知

Windows 用户需要在防火墙的入站规则中运行 27149 端口的连接,否则此软件无法被手机访问。

自行编译

git clone [email protected]:FrankFang/synk.git
cd synk
cd server/frontend; yarn; yarn build; cd -
./scripts/build_for_mac.sh
./scripts/build_for_win.sh

我的收获

  1. 知道如何用 Go 写一个发布订阅(使用 websocket 的时候看到别人的源码了)
  2. 知道 ch2 <- ch1ch2 <- (<-ch1) 的区别了,前者一般是写错了
  3. 知道了 Go 应用代码引入本地包的方法

More Repositories

1

best-chinese-front-end-blogs

收集优质的中文前端博客
3,863
star
2

wheels

笨办法造轮子
JavaScript
1,036
star
3

gulu

轱辘,面向源码阅读者的 UI 框架
HTML
646
star
4

fack

Fack: A prolonged way of saying "f*ck" when you are busted in an awkward/uncomfortable situation.
JavaScript
106
star
5

oh-my-docker

Shell
78
star
6

gulp-html-extend

Extend your html files
JavaScript
66
star
7

githublog

A blog
64
star
8

nodejs-test

JavaScript
59
star
9

gulu-for-vue3

一个面向学习者的 UI 框架
Vue
51
star
10

oh-my-env-1

Dockerfile
42
star
11

make-a-pikachu

预览链接:
JavaScript
38
star
12

fIHOZKRf4eu9

33
star
13

dot-files

Shell
24
star
14

wtf-blog

这也能算一个博客系统?
CSS
23
star
15

wtf-slides

这也能算一个 PPT 系统?!
CSS
17
star
16

frankfang.com

frankfang.com
CSS
14
star
17

cv-2020

预览地址:
HTML
14
star
18

gulu-design-resources

预览
13
star
19

micro-frontend-starter

TypeScript
12
star
20

163-music-2018

仿网易云音乐,包含管理端(admin 页面)
JavaScript
10
star
21

canvas-demo-2017

手机画板
JavaScript
10
star
22

GEIUHH6wQRwj

Vue
8
star
23

PRoSroG

TypeScript
8
star
24

calendar

A calendar
JavaScript
8
star
25

animating-resume

预览地址:
JavaScript
7
star
26

nav-demo

预览:
HTML
6
star
27

nav-1

点击预览:
CSS
6
star
28

synk-demo-6

JavaScript
5
star
29

chrome-app-rssly

yet another rss reader
JavaScript
5
star
30

Get-D2-2015-Ticket

Get D2 2015 Ticket - Designer & Developer Frontend Technology Forum
5
star
31

NetEaseMusic

用 vw (或 REM)做的界面
HTML
5
star
32

bvM2PY

TypeScript
5
star
33

data-structure-1

JavaScript
5
star
34

sign-in-demo

JavaScript
4
star
35

cv-1

会动的代码,点击预览 →
JavaScript
4
star
36

mvc-demo-1

JavaScript
4
star
37

WAxM06FAtLXQ

Vue
4
star
38

qjVPO7f89org

Vue
4
star
39

gobook

TypeScript
4
star
40

ajax-1

JavaScript
4
star
41

ts-react-demo-2

HTML
4
star
42

mvc-demo-2

JavaScript
4
star
43

iYLyTNaZmLRi

Vue
4
star
44

kuayu-1

JavaScript
4
star
45

oh-my-docker-m1

Shell
3
star
46

vue-roadmap

预览:
HTML
3
star
47

vim

VIM config on Windows
Vim Script
3
star
48

WgGRGvfAVyp5

TypeScript
3
star
49

ts-vue-demo-1

Vue
3
star
50

slides-demo-2

预览:
JavaScript
3
star
51

wtf-weekly

JavaScript
3
star
52

LWxzO1srBMPJ

JavaScript
3
star
53

static-server-2

JavaScript
3
star
54

morney-test-vue-echarts

Vue
3
star
55

3iw2WJa

TypeScript
3
star
56

morney-react-1

JavaScript
2
star
57

8pPES5Jg7mjh

2
star
58

blog

HTML
2
star
59

mangosteen-fe-3

TypeScript
2
star
60

UU85n20nnISV

TypeScript
2
star
61

5wYFQeLGpka4

Vue
2
star
62

hJS1Ra

TypeScript
2
star
63

XLn4Pf

TypeScript
2
star
64

promise-2

TypeScript
2
star
65

dom-demo-1

JavaScript
2
star
66

node-todo-2

JavaScript
2
star
67

frank-test-5

JavaScript
2
star
68

morney-react-tags

JavaScript
2
star
69

TGePcO

TypeScript
2
star
70

resume-15-5

预览
HTML
2
star
71

2018-react-demo-1

预览地址:
JavaScript
2
star
72

redux-demos

JavaScript
2
star
73

westore-react-1

点击预览:
JavaScript
2
star
74

l3xHutO

TypeScript
2
star
75

pikachu-2

JavaScript
2
star
76

dom-2-prototype

HTML
2
star
77

frank-test-6

预览 ->
TypeScript
2
star
78

webpack-demo-3

JavaScript
2
star
79

promise-test

TypeScript
2
star
80

mvc-demo-zbxl

JavaScript
2
star
81

morney-live-money-1

Vue
2
star
82

morney-live-svg

Vue
2
star
83

deepClone

JavaScript
2
star
84

morney-live-1

Vue
2
star
85

j3x2

TypeScript
2
star
86

morney-rails-2

Ruby
2
star
87

nextjs-typeorm-show-posts

TypeScript
2
star
88

2018-react-demo-2

JavaScript
2
star
89

to2vk9

TypeScript
2
star
90

web-perf-node-demo-1

JavaScript
2
star
91

mvc-demo-nY5i

JavaScript
2
star
92

HFHznhsghqne

Vue
2
star
93

mvc-demo-Q7os

JavaScript
2
star
94

MQhjd1d

Ruby
2
star
95

bind

JavaScript
2
star
96

source-eventhub

视频讲解链接
TypeScript
2
star
97

ts-react-demo-3

HTML
1
star
98

ke

HTML
1
star
99

morney-react-42

JavaScript
1
star
100

morney-react-tag

JavaScript
1
star