George
хотя сдлеать было бы изи потому что го под капотом си гоняет
Maks
Я когда в геймдеве работал, там не редко платформозависимый код так компилили
Maks
это позволяло уменьшить размер билда
George
не, с умом-то все неплохо. И гоу ту, и макросы. Их тяжелее дебажить, с ними проще выстрелить себе куда-то не туда куда хочешь, код с ними тяжлее читать, они прячут ворнинги, их часто используют как функции, но они не ведут себя как функции (см. про выстреливание)
George
но для кросплатформенноси самое то
Игроман
В доках пишут, что ldflags -- это только зависимости от платформы. Значит нужен конфигурационный файл где-нить в /etc
George
ldflags это флаги линкеру
George
это для всего
Maks
я почитал, говорят что в го можно использовать теги
Maks
где у тебя 2 го файла
Maks
с разными тегами
Maks
И там у тебя код отличается
Maks
если надо
George
да можно, не знаю откуда тема про то что они депрекейтед)))
xasai.denet
а как через линкер собираетесь макросы подать?
xasai.denet
макросы обрабатывает препроцессор, на сколько помню
George
а как через линкер собираетесь макросы подать?
через линкер мы можем задавать значение переменных
George
через -X, если конкретно
Maks
Ну просто допустим смотри. У меня на проекте было так, что заказчик просил на тестовом сервере ограничить отправку писем. (я на пыхе писал) и что бы при отправке заявки ему в сервис работы с заявками не прилетало уведомление и задача не ставилась
Maks
я делал это через енв с иф елсе
Maks
то есть в зависимости от окружения
Maks
было бы круто, Если бы можно было бы просто изначально иметь только нужную версию приложения
Maks
и избавиться от ветвления во время исполнения
Maks
Например если я в го захочу сделать так же
Maks
мне придется написать 2 mail провайдера?
Maks
и запускать сборку с разными тегами?
Maks
или всё таки придется иметь сборку с ветвлением котрое на проде никогда не случится?
George
ну все от задачи зависит. У меня в C проекте макросами обмазано по самые не балуй.Но это C и тяжелый процессинг траффига (рутер программный). В го через таги подключать можно. Если ты хочешь исклчить саму возможность (чтобы клиент не дай боже не пользовал то, что ему низзя). Я думаю в твоем случае таги как раз то что нужно
Maks
вопрос не в том что бы он не использовал
Maks
а в том, что бы в программе не было ветвления просто
Maks
потому что оно излишне
Maks
так как никогда не произойдет
George
я бы решал так как проще. Доп. ветвление погоды не делает. Но с тэгами как раз таки проще . Ведь с ветвлением помимо самого его наличия надо бдет еще как-то передавать критерии для него
George
два файла с разными реализациями, один интерфейс
Maks
ну понятно. Просто придется получается сделать файл самого приложения, грубо говоря main_release.go main_test.go типо точка входа в зависимости от тега.
Maks
и потом по коду придется везде это же делать
George
что-то там было более элегантное...
George
времен не особо, но попробую найти
George
вобщем есть мысля, но надо проверить. Через пару часов отпишу, самому интересно. Потому что у меня такой задачи не возникало, но в интернетах видал варианты.
Maks
теги нужны для того
Maks
что бы в коде их не обрабатывать
George
Как обрабатывать tags в коде и как их прописывать в команде build? Ну и ничего, что тэги deprecated?
Так где написано-то что депрекейтед? Скопируй пожалуйста. Остальное гуглится за две секунды, камон. Ты же не бухгалтерша, которая "что-то нажала и всё не работает"
Maks
у тебя изначально сборка идет условно правильная
Maks
Earlier versions of Go used a space-separated list, and that form is deprecated but still recognized.
leejoys
Пишем проект на курсе по го. Приложение принимает файл конфигурации, из него читает список адресов и временной период, например 5 минут, потом каждые 5 минут опрашивает адреса, читает с них rss ленту, и сохраняет новости в бд. Сервер в это время слушает порт и выдает на / вебприложение, которое запрашивает по /news/10 последние 10 новостей из бд и показывает пользователю. Приложение я написал, но более опытные разработчики говорят, что оно неподдерживаемое, так как сильносвязанное. Я его отрефакторил, но структура пакетов всё равно не соответствует зависимостям. Отсюда вопрос - на каких слоях должны располагаться функции: опрашивающая RSS через запуск горутин для каждого адреса, декодирующая ответ, передающая результат из канала в БД и обрабатывающая ошибки из канала ошибок?
Maks
там говорят что разделение пробелами типа деприкейтед
Maks
теперь запятыми
Maks
между тегами
Игроман
там говорят что разделение пробелами типа деприкейтед
Я понял. Только при паркинге я, что, должен поддерживать два формата: старый и новый?
George
Я понял. Только при паркинге я, что, должен поддерживать два формата: старый и новый?
все, что депрекейтед - лучше не использовать. А если уже используется - рекомендууется поменять на рекомендованный вариант
George
ну понятно. Просто придется получается сделать файл самого приложения, грубо говоря main_release.go main_test.go типо точка входа в зависимости от тега.
вот такое решает проблему? самый go way из доступных, по мне (ошибка IDE - не ошибка, лень конфиг править из-за примера)
Игроман
Вот, сделал версию с параметрами командной строки. Теперь хочу сделать то же самое через конфигурационный файл. Но для этого хотелось бы понять, каким образом делать deb-пакет из скомпилированного файла
George
в поисковике по выбору
George
а зачем дэб? чтобы запаковать и конфиг файл? какая задача решается?
Игроман
а зачем дэб? чтобы запаковать и конфиг файл? какая задача решается?
Ну, если у меня в распространяемой пакете имеется конфигурационный файл, то при инсталляции он должен быть скопирован в каталог /etc Просить пользователя создать конфиг файл неприлично. Значит нужен deb-пакет, который установит прогу и припишет должным образом deb-пакет.
Игроман
"how to make deb package"
В принципе я умею делать deb-пакеты с помощью cmake. Но раз уж речь пошла про Go, то не мешало бы понять, как это делает Go
George
я в своем проекте через make делал
George
тупо строчки добавляя в конфиг деба
George
в завимости от парметров
George
cmake, make, ninja, ant, maven - билд системы. Го - язык программирования. Создание пкеджей для разных пеедж менджеров не его задача
George
для простенького проекта я бы создавал через мейк без всяких там плагинов и прочих абстракций.
George
ой, наврал про мейк. сейчас чекнул - у меня это шелл скрипт делает
Игроман
я в своем проекте через make делал
То есть, получается, схема такая: 1. Сначала с помощью "go build..." генерится исполнительный модуль go 2. Затем с помощью cmake происходит компиляция всех c++ -файлов в тот же каталог, где и скомпилированная go-програма лежит 3. Затем cpack генерит deb-пакет 4. Затем командой dpkg -i ./*.deb происходит установка пакета И все это можно сделать одним скриптом. Круто!
Игроман
ой, наврал про мейк. сейчас чекнул - у меня это шелл скрипт делает
Может быть я этап пропустил. В результате работы cmake генерится makefile
George
ну наличие с++ сорцов в данном случае не важно. Если речь про упаковку деба, то ответ простой - это не зона ответсвенности языка программирования и его тулчейна. Компилятор делает бинарники.
George
собрать пакет можно тоже через dpkg-deb
Игроман
собрать пакет можно тоже через dpkg-deb
Это неудобно очень. Но можно
Maks
вот такое решает проблему? самый go way из доступных, по мне (ошибка IDE - не ошибка, лень конфиг править из-за примера)
спасибо за пример, а то я уже по другому начал делать, не знал как это работает
Maks
теперь всё ясно
Maks
я изначально сделал так же 3 класса мейлера со структурой и 3 класса апп
Maks
ну и в апп сделал билд теги
Maks
и в них разные мейлеры просто создавал