choosing the best adhesive for Go code #1
Одна из сторон языка Go, за которую его многие любят, это простота. Она же является и его слабостью, выражающейся в увеличении количества кода вместе с повышением уровня абстракции.
Я хочу писать более абстрактный код там где это требуется, снимая ограничения системы типов если это необходимо. Для этого в серии статей буду искать такую реализацию скриптового языка, которую можно подружить с Go рантаймом и я точно знаю что хочу нечто lisp-подобное.
Зачем такой язык нужен:
- конфигурация: на скриптовом языке описывается конфигурация приложения
- инициализация: из кода на интерпретируемом языке происходит инициализация компонентов, написанных на языке компилируемом
- расширение: виртуальной машине интерпретируемого языка в некоторые моменты передаётся управление с целью увеличения гибкости
run PostgreSQL by hands
Раз в год (или около того) мне нужно запустить PostgreSQL с целью поразрабатывать что-нибудь. За то время что я его не использую знания выветриваются, так что на будущее я делаю эту заметку, в основном для себя.
Запускать PostgreSQL можно разными способами, вот два самых распространенных:
- использовать docker
- поставить пакет
Оба способа немного магические. Контейнеры стараются быть удобными и покрывать как можно больше функциональности, что выливается в адские entrypoint’ы на bash с обратным удобству эффектом. Пакеты в распространенных дистрибутивах тоже содержат не мало магии, ведь они обычно (как минимум) инициализируют директорию с данными СУБД и запускают её сервис.
В nixos тоже есть пакет для PostgreSQL, но он не управляет ни запуском, ни процессом инициализации. Так что полезно помнить как работать руками.
reproducible docker containers
Многие сегодня используют docker для доставки своих решений в продакшен. Обычно образы собираются с помощью т.н. Dockerfile
, который может иметь следующий вид:
FROM golang:latest as builder WORKDIR /go/src COPY . . RUN go build -o app FROM alpine:latest COPY --from=builder /go/src/app /bin/app CMD /bin/app
Можно ли сказать что образ, полученный в результате сборки с указанным Dockerfile
, будет воспроизводимым?
Нет. Эта заметка объясняет:
- почему
- как писать
Dockerfile
чтобы приблизиться к воспроизводимости - чем заменить
Dockerfile
чтобы сделать сборки воспроизводимыми
emacs + go-mode + lsp + REPL
Некоторое время назад я начал переезжать с spacemacs обратно на самописную конфигурацию(мне так стабильнее и кастомайзить проще). Common LISP и scheme работают почти без настройки, а вот с golang пришлось поплясать.
Цель: настроить среду разработки, которая способна:
- к автокомплиту
- выводу документации
- go to definition
Это минимум, необходимый мне для работы.
Скажу сразу:
- не всё заработало
- некоторые вещи тормозят
- некоторые работают странно
Но жить можно, плюс ко всему - понятно что улучшать.