Разработать кроссплатформенное настольное приложение на языке Go (псевдо)

задняя часть Go

Я недавно изучаю язык Go, и грамматика почти такая же. Я думал о том, чтобы найти что-то делать. Я просто хотел сделать программное обеспечение, которое "переносит файлы между ПК и мобильным телефоном по локальной сети, и не Я не хочу использовать WeChat/QQ и другое беспокоящее программное обеспечение», поэтому просто используйте Go, чтобы сделать это, и окончательный снимок экрана выглядит следующим образом:

image.png

image.png

image.png

Функция проста:

  1. После загрузки текста или файлов на ПК создайте QR-код и укажите его в мобильном браузере, чтобы отсканировать код для загрузки.
  2. После того, как мобильный телефон загрузит текст или файлы в браузер, он автоматически уведомит ПК через веб-сокет, и появится всплывающее окно с запросом на загрузку.

Исходный код здесь, тут в основном говорят о реализации идей.

Реализовать идеи

Создавайте окна с помощью Loca

Я узнал, что следующие библиотеки для Go могут реализовывать окна:

  1. lorca- Вызвать существующий в системе Chrome/Edge для реализации простого окна, а пользовательский интерфейс реализован через HTML/CSS/JS.
  2. webview- Он мощнее, чем лорка, и идея реализации пользовательского интерфейса аналогична
  3. fyne- Фреймворк пользовательского интерфейса, нарисованный с использованием Canvas, с хорошей производительностью
  4. qt- Более сложная и мощная структура пользовательского интерфейса

Я просто выбрал самую простую Лорку и начал.

Сделать пользовательский интерфейс с помощью HTML/CSS/JS

Я использую React + ReactRouter для реализации структуры страницы, загрузка файла и диалог написаны с помощью собственного JS, а детали пользовательского интерфейса выполняются с помощью CSS3, не полагаясь на другие библиотеки компонентов пользовательского интерфейса.

Основная функция Lorca — отображать написанный мной index.html.

использоватьginРеализовать бэкэнд-интерфейс

JS в index.html использует пять интерфейсов, и я использую 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)

Генерация QR-кода, которую я использую,go-qrcode.

использоватьgorilla/websocketРеализовать уведомление мобильного телефона на ПК

Эта библиотека представляет собой пример чата, который работает у меня с небольшой модификацией.

вся идея

В целом:

  1. Сделайте окно с Лоркой
  2. Используйте HTML для создания интерфейса и используйте JS для вызова фонового интерфейса.
  3. Реализация внутреннего интерфейса с помощью Gin
  4. Загруженные файлы помещаются в папку uploads

Всего 400 строк кода Go и 700 строк кода JS.

как пользоваться

В настоящее время я только протестировал систему Windows, и она работает нормально. Теоретически macOS и Linux тоже должны работать, но я не проверял.

ты сможешьстраница релизовЗагрузите исполняемый файл или вы можете самостоятельно скомпилировать исходный код, чтобы получить исполняемый файл.

Уведомление для пользователей Windows

Пользователям Windows необходимо запустить подключение к порту 27149 во входящем правиле брандмауэра, иначе это программное обеспечение не будет доступно по телефону.

скомпилируй сам

git clone git@github.com:FrankFang/synk.git
cd synk
cd server/frontend; yarn build; cd -
./scripts/build_for_mac.sh
./scripts/build_for_win.sh

мой урожай

  1. Знать, как написать публикацию-подписку на Go (см. чужой исходный код при использовании websocket)
  2. знаниеch2 <- ch1иch2 <- (<-ch1)Разница в том, что первое обычно пишется неправильно.
  3. Знать, как импортировать локальные пакеты из кода приложения Go.