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

Сказав это, я часто балуюсь программированием для решения конкретных проблем клиентов. Это может включать некоторые вещи AWK для обработки текстовых файлов или макросов Excel VBA, которые делают боль электронных таблиц несколько терпимой. Они могут не пройти проверку у настоящих гиков, но они выполняют свою работу. Некоторые из них живут годами, что меня удивляет. Некоторое программное обеспечение для бизнеса, которое я использую, включает сценарии на VB или VB-подобных проприетарных языках.

Для недавнего концерта мне пришлось написать простую программу, загружающую текстовые файлы в таблицу SQL. Да, это все, что он делает. Я попросил кого-то сделать это на Python, так как я был занят другими аспектами этого задания.

То, что я получил, привело меня в ужас! Да, код работал, но потом мне пришлось установить не только Python, но и множество других вещей, которые включали около 25 миллионов маленьких файлов, которые долго архивировались или резервировались. Хорошо, я преувеличиваю, но вы поняли. Излишне говорить, что все это должно было быть установлено и на стороне заказчика.

Тогда я подумал о Node. Но я понял, что это также связано с установкой множества модулей только для того, чтобы сделать некоторые основные вещи.

Я немного поиграл с идеей использования C# для создания программы Windows либо из командной строки, либо с каким-то элементарным пользовательским интерфейсом, но вскоре отказался. Кривая обучения, по крайней мере для меня, была слишком крутой. Возможно, теперь, когда у меня есть работающий код, я мог бы попробовать этот маршрут, просто чтобы посмотреть, как они сравниваются.

Именно тогда я открыл для себя GO. Как говорится, остальное уже история!

Начните работать с GOLANG

Я решил попробовать, не написав до этого ни строчки в GO. На самом деле, я едва знал, что он существует.

Я скачал его, установил и начал гуглить примеры кода и советы. Я не из тех, кто читает инструкции, поэтому я не удосужился пройтись по всем «Hello, World!» типовые учебники. Я знал, чего хочу, и знал достаточно основ, таких как переменные, функции, for-next, do-while и прочее. Заходи, учись на ходу!

В качестве редактора я использовал Visual Studio Code. Даже это было для меня новым, и мне пришлось избавиться от раздражающих функций, которые действительно помогают вам, как только вы их освоите. Например, если сначала добавить ссылку на импорт, а затем использовать ее, строка будет удалена при сохранении файла. Вы делаете это наоборот. Используйте его, и VSC добавит его для вас!

Прелесть VS Code в том, что он очень хорошо интегрируется с Git. Еще один аспект программирования, который я никогда раньше не использовал. В конце концов, макросы Excel VBA не могут использовать Git. Я изучил несколько основ, таких как постановка, коммит и ветки. Этого было более чем достаточно. Я смог опробовать новые варианты и функции, не испортив основной код, который работает.

Другими словами, я мог строить постепенно и возвращаться к началу, если что-то облажался. Это намного лучше, чем резервные копии типа «Code_V12_20201201_1530.txt», которые я делал раньше!

Начав с простого подключения к SQL Server, работающего с протоколированием ошибок, чтением конфигурации из файлов JSON, использованием параметров командной строки, архивированием файлов, я включил несколько интересных вещей с наименьшими усилиями!

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

Особенности, которые мне понравились

  1. Самый большой плюс в том, что он создает небольшой (на самом деле маленький) исполняемый файл, который просто запускается! У меня все еще меньше 8k, и он выполняет много полезной работы. Развертывание является тривиальным и не требует ничего на серверах или ПК клиента.
  2. Код кроссплатформенный, хотя это не мое требование.
  3. Чтение информации о конфигурации на основе JSON, такой как имена серверов и имена таблиц, также довольно тривиально. Это все встроено.
  4. Доступ к базе данных через SQL также встроен. Вам просто нужен водитель. Да, ADODB или другие технологии Microsoft в принципе работают так, но тогда вы в конечном итоге развертываете множество DLL, которые могут не работать, если что-то изменится. В GO все самодостаточно.
  5. Я мог создать несколько файлов журналов практически без усилий!
  6. Оператор отсрочки удобен. Это оставляет заботу о закрытии ресурсов программе. Оно знает, когда это сделать. Мы либо забываем, либо делаем это слишком рано или поздно.
  7. Переменные можно создавать на ходу, используя синтаксис :=. Хотя это может показаться опасным (я использую Option Explicit в VBA просто на всякий случай), это работает хорошо.
  8. Обработка ошибок довольно мощная, простая и отличается от других языков. Функции могут и обычно возвращают как значение, так и ошибку. Эта концепция двойного возврата является довольно мощной. Например: conn, err := sql.Open(“sqlserver”, connString). Это побуждает меня по привычке включать обработку ошибок практически в каждую строку рабочего кода.
  9. Создание zip-файлов и управление ими также встроено. Так же как и обработка файлов, папок и других подобных вещей. Существует множество «пакетов», которые входят в стандартную комплектацию GO.
  10. Я попытался создать HTML-отчет о выполненных действиях и сводку результатов, используя шаблон. Шаблон может иметь предопределенное содержимое, форматирование и текст маркера, например {{ .item1 }}, который заменяется программой во время выполнения. Это чрезвычайно мощный и простой!. Возможно, это уникально для GO. Это опять же встроенная функция.
  11. Простые соглашения, такие как использование имен функций, начинающихся с верхнего регистра, определяют, доступны ли они для внешних программ.
  12. Обработка даты и времени превосходна. Опять же, это встроено. Вы можете анализировать даты и форматировать их различными способами.

Я мог продолжать и продолжать. Короче говоря, я попался на крючок.

Долгий путь

Очевидно, есть чему поучиться. Возможно, мне следует вернуться, прочитать настоящее руководство или учебник и узнать больше о таких вещах, как срезы и указатели, просто чтобы получить прочную основу. Но тот факт, что я мог запустить полезную программу без этого, во многом говорит об универсальности GOLANG.

Удивительно, но я даже не понял, как выполнять базовую отладку с помощью VS Code. Это намного сложнее, чем нажатие F8 в Excel VBA. Я просто использовал записи в журнале и догадки для выявления ошибок. Естественно, это не сработает для больших проектов.

Я также еще не разобрался с концепцией модуля. Многие документы и результаты онлайн-поиска дают вам ответы в старом стиле. Это не вина GO, а моя собственная нехватка усилий.

Большинство руководств, кажется, тратят много времени на написание тестовых процедур параллельно с разработкой кода. Я просмотрел некоторые из них, но так и не понял сути. Может быть, я что-то упускаю. Большинство ошибок происходит, когда пользователи делают то, что вы даже не предполагали! Я бы предпочел тратить время на то, чтобы бросать вещи в свою программу, чтобы увидеть, где она сломается.

Плохо

Конечно, GO не без проблем.

Один большой минус для меня заключается в том, что он не позволяет генерировать интерфейсы Windows. Таким образом, написать простую программу с элементарным пользовательским интерфейсом для ввода ввода невозможно, по крайней мере, насколько мне известно.

Единственный способ обойти это — использовать веб-интерфейс. К счастью, GO, похоже, тоже упрощает эту задачу. Я еще не пошел по этому пути. Пока я придерживаюсь командной строки.

Как я упоминал ранее, хотя VS Code отлично интегрируется с GO и Git, он по-прежнему усложняет отладку. Мне еще предстоит это понять. Редакторы, созданные для GO, не являются бесплатными.

Советы новичкам (или новичкам?)

  1. Попробуйте!
  2. Просто определите практический вариант использования и приступайте к работе. Это намного лучше, чем читать учебники, посвященные искусственно упрощенным сценариям. Возможно, для начала неплохо взять существующую работающую программу и преобразовать ее.
  3. Используйте Git от слова GO!
  4. Старайтесь использовать множество небольших функций, а не страницы кода. Таким образом, детали можно модернизировать, заменять на ходу!
  5. Проверьте на ошибки и создайте логи. Не паникуйте!
  6. Просто предположим, что все, что вводит пользователь, — это дерьмо и даже опасно.
  7. GO упрощает использование запросов драйвера параметров (например, SELECT Field1 FROM myTable WHERE ValueDate = @P1) вместо объединения строк. Это якобы безопаснее от нападений. Используй это!
  8. Войдите широко. Это можно отключить, когда вы будете более уверены. Это также хороший способ избавиться от ошибок.

Приятного обучения!