Несмотря на то, что язык Go существует уже не один год, информация о том, как создавать приложения с графическим интерфейсом на этом языке, практически отсутствует. Возможно это вызвано тем, что среди официальных библиотек до сих пор нет библиотеки для работы с GUI. Однако это не значит, что мы не можем создать приложение с пользовательским интерфейсом: существуют библиотеки, предоставляющие такую возможность. Приведу их список. Но есть еще несколько библиотек, не указанных в этом списке. Среди них — Walk, название которого расшифровывается как «Windows Application Library Kit». С его помощью я попробую создать небольшое приложение с пользовательским интерфейсом.
Постановка задачи
Предположим, что я хочу создать небольшой блокнот, позволяющий мне сохранять введенный текст в файл, загружать этот текст обратно, копировать текст в буфер обмена и извлекать из него же.
Установка библиотеки Walk
Walk работает только с Go версии 1.1.x и выше. На первом этапе нужно загрузить и установить библиотеку с GitHub. Запускаем CMD и выполняем команду:
|
|
Если Go ругается и выдает что-то типа go: missing Git command ...
, то нужно посетить сайт Git’a и установить его. Если после установки его ошибка не исчезла, нужно убедиться, что в %PATH% прописан путь до Git.
Создание пустой формы
Создадим исходный файл gopad.go
с таким содержимым:
|
|
Теперь скомпилируем наш исходник. Создадим bat-скрипт build.bat
с таким содержимым:
|
|
Мы могли бы не прописывать ключ ldflags
, но тогда бы форма запускалась вместе с консолью на заднем плане. Запустим наш скрипт и убедимся, что все скомпилировалось корректно. Но запускать полученный exe-файл пока что рано. Нужно создать еще один файл — манифест. Создадим файл gopad.exe.manifest
(вместо gopad.exe
должно быть название полученного бинарника) с таким содержимым:
|
|
Манифест обязательно должен присутствовать. Без него бинарник не запустится!
Когда все сделано, пора запустить нашу пустую форму, чтобы убедиться, что все работает. У меня полученная программа выглядит так:
Добавляем необходимые кнопки и поле ввода
Для начала добавим поле ввода. Добавим в import еще одну библиотеку:
|
|
Потом создадим поле ввода, переменную-указатель и привяжем его к полю:
|
|
Запустим и убедимся, что появилось поле ввода, которое отображается на всю форму.
Таким же образом пропишем в MainWindow четыре кнопки: «Copy», «Paste», «Load», «Save»:
|
|
В результате получаем вот такую форму:
Когда все элементы расположились на ней, пора добавить немного функционала.
Работа с буфером
Чтобы добавить обработчик нажатия на кнопку, достаточно прописать необходимую функцию, которая будет запускаться при нажатии кнопки, в свойствах самой же кнопки:
|
|
Мы можем либо создать анонимную функцию, либо прописать уже существующую.
Walk позволяет нам работать с буфером обмена напрямую через данные функции:
|
|
Чтобы получить или заменить текст в поле ввода, используем такие функции:
|
|
Теперь содержимое наших кнопок станет таким:
|
|
Сохранение в файл и загрузка из него
Давайте вынесем загрузку и сохранение в файл в отдельные функции. Для этого сделаем переменную edit
глобальной. Создадим функцию readFromFile
, подгружающую в поле текст из текстового файла file.txt
(не забываем, что в import нужно добавить “io/ioutil”):
|
|
Теперь нам нужно привязать функции к соответствующим кнопкам:
|
|
P.S. Содержимое текстового файла программа читает и пишет в юникоде.
Итоги
Мы создали небольшой блокнот с графическим интерфейсом на языке Go с использованием библиотеки Walk. При желании функционал можно расширить: добавить выбор файла, контекстное меню, работу с вкладками и шрифтами и многое другое. Walk активно развивается и предоставляет доступ к большому числу компонент WinUI. На репозитории проекта находится много примеров с использованием библиотеки.
Ссылки
Маленькая заметка
В оригинале статья была опубликована тут