Игроман
Правила нельзя передавать из сборщика типа make или cmake ldflags -- это исключительно для указания особенностей загрузки и компоновки: для внутренних нужд и только с предопределенным набором дефайнов
George
ldflags у меня вообще почему-то ошибку выдают. Любые значения валят прогу.
Терпение, чтение мануала и дебаг всё перетрут :) обязано работать.
Игроман
Терпение, чтение мануала и дебаг всё перетрут :) обязано работать.
Ну, потрясающе лёгкий в использовании, простой для понимания язык!
George
Игроман
Для симуляции препроцессора есть теги.
Про тэги говорили вчера: не пашет совсем.
Maks
Пашет
Игроман
Лёгкий и простой относительно других. Факт.
На плюсах уже давно весь проект написал, но двое суток трахаюсь с условной компиляцией.
Игроман
Пашет
Вчера уже всё обсудили.
George
На плюсах уже давно весь проект написал, но двое суток трахаюсь с условной компиляцией.
И виноват конечно же язык :))) я хорошо говорю по-русски, а на испанском дальше "привет, меня зовут Вася" не получается. Ну и дерьмовый же язык этот испанский
George
Мб стоит весь проект на плюсах делать тогда?
George
Чем меньше технологий намешано - тем лучше
Игроман
Мб стоит весь проект на плюсах делать тогда?
Может быть. И моя задача -- переубедить руководство. Срочно разыскивается хоть маленькая ниша под го. И на поиск этой ниши я трачу свой отпуск!
Игроман
Чем меньше технологий намешано - тем лучше
Тогда лучше писать на ассемблере: в нем вообще нет никаких технологий
Игроман
Если я за месяц не смогу найти нишу для Go, то уволят шестерых гошников, которые пока ещё трудоустроены
George
Тогда лучше писать на ассемблере: в нем вообще нет никаких технологий
Если основная часть проекта написана на нем - то да. Энтропия - враг программиста. Если в компании нет применения гошникам, портить проект чтобы применение было - такое себе.
George
Иии почему гошники сами не могут это сделать?
George
Почему это должен делать человек, который с го на вы?
Игроман
Если основная часть проекта написана на нем - то да. Энтропия - враг программиста. Если в компании нет применения гошникам, портить проект чтобы применение было - такое себе.
Ну, если бы Go можно было использовать хотя бы для тестирования или для каких-нибудь промежуточных расчетов, то это бы спасло ситуацию. Вот ведь Дельфи, c++, СиШарп и даже Фортран умеют между собой общаться, а го даже условную компиляцию не умеет. Обидно! Сервера писать на Go-одно удовольствие
Игроман
Почему это должен делать человек, который с го на вы?
Потому что это мой коллектив: я им управляю
George
Потому что это мой коллектив: я им управляю
А если честно ребятам сказать, мол, вам применения сейчас нет, сделаете вот это - тогда у меня будет шанс уговорить руководство? Не тот случай, когда со стороны виднее, но тем не менее. Всё таки у 6 профильных программеров скилл должен быть достаточным, чтобы сделать задачу эффективнее одного человека с непрофильным
George
Ну, если бы Go можно было использовать хотя бы для тестирования или для каких-нибудь промежуточных расчетов, то это бы спасло ситуацию. Вот ведь Дельфи, c++, СиШарп и даже Фортран умеют между собой общаться, а го даже условную компиляцию не умеет. Обидно! Сервера писать на Go-одно удовольствие
Так всё есть :) надо просто уметь готовить. Но для этого иногда надо подебажить чтобы понять какую-то упущенную мелочь. Ни в одном языке обычный программер не сможет просто "взять и написать" с ходу. Этап обучения не пропустить. Даже если это такой дружественный язык как го
Игроман
Знаете, мне есть с чем сравнивать: я вижу сколько времени необходимо человеку чтобы въехать в СиШарп, Дельфи, Си++. Всегда было достаточно одной-двух недель. Вот есть у нас незакоытой задача написания демонстрационных клиентов к нашим серверам. Ну, типа, чтобы продемонстрировать клиентам работоспособность нашего ПО. Так ведь Go больше заточен на сервера, родной графики у него нет.
George
Если по теме - какая конкретно задача должна решится условной компиляцией?
George
Знаете, мне есть с чем сравнивать: я вижу сколько времени необходимо человеку чтобы въехать в СиШарп, Дельфи, Си++. Всегда было достаточно одной-двух недель. Вот есть у нас незакоытой задача написания демонстрационных клиентов к нашим серверам. Ну, типа, чтобы продемонстрировать клиентам работоспособность нашего ПО. Так ведь Go больше заточен на сервера, родной графики у него нет.
Ну это как жаловаться что в с++ сборщика мусора нет) у каждого языка свои сильные и слабые стороны и области применения. По теме 1-2 недели для разработки на плюсах - у вас случайно второго аккаунта нет? На днях товарищ примерно тоже самое говорил, что мне видится крайне странным. Хотя учитывая количество рекламы типа "стань мидлом с нуля за месяц" - может это только мне странным кажется
Игроман
Ну, вот сейчас у меня есть tcp-сервер на Go. Ему в качестве параметров компиляции передаются номер порта, адрес хоста и ещё несколько параметров протокола обмена. Сам сервер уже написан и работает. Далее есть клиент, написанный на c++, которому в качестве параметров передаются те же самые значения, что и серверу. Клиент тоже написан и работает. Задача заключается в том, чтобы генерить оба эти сервера из одного cmake-скрипта. Я даже сделал такой скрипт и он действительно передает через параметры командной строки нужные опции в го-сервер. Но тут возникла проблема: горутины не видит аргументы командной строки так как они определены в другом потоке. Каналы позволяют передавать только данные стандартных типов. Map не передается через каналы (это, кстати, особенность ЯЗЫКА!!!).
Yuriy
Ну, вот сейчас у меня есть tcp-сервер на Go. Ему в качестве параметров компиляции передаются номер порта, адрес хоста и ещё несколько параметров протокола обмена. Сам сервер уже написан и работает. Далее есть клиент, написанный на c++, которому в качестве параметров передаются те же самые значения, что и серверу. Клиент тоже написан и работает. Задача заключается в том, чтобы генерить оба эти сервера из одного cmake-скрипта. Я даже сделал такой скрипт и он действительно передает через параметры командной строки нужные опции в го-сервер. Но тут возникла проблема: горутины не видит аргументы командной строки так как они определены в другом потоке. Каналы позволяют передавать только данные стандартных типов. Map не передается через каналы (это, кстати, особенность ЯЗЫКА!!!).
Передается что угодно... Что мешает горутину передать структуру с конфигурацией?
Игроман
Передается что угодно... Что мешает горутину передать структуру с конфигурацией?
Вы хотите сказать, что команда make(chan[string]string) может работать? Мой хелп в го говорит мне, что только стандартные типы возможны
Игроман
Передается что угодно... Что мешает горутину передать структуру с конфигурацией?
Нужна динамическая структура, статическая не подойдёт: ведь количество передаваемых дефайнов может быть любым
🔥
Ну, вот сейчас у меня есть tcp-сервер на Go. Ему в качестве параметров компиляции передаются номер порта, адрес хоста и ещё несколько параметров протокола обмена. Сам сервер уже написан и работает. Далее есть клиент, написанный на c++, которому в качестве параметров передаются те же самые значения, что и серверу. Клиент тоже написан и работает. Задача заключается в том, чтобы генерить оба эти сервера из одного cmake-скрипта. Я даже сделал такой скрипт и он действительно передает через параметры командной строки нужные опции в го-сервер. Но тут возникла проблема: горутины не видит аргументы командной строки так как они определены в другом потоке. Каналы позволяют передавать только данные стандартных типов. Map не передается через каналы (это, кстати, особенность ЯЗЫКА!!!).
А функция запускаемой горутиной "структурный")
🔥
Ну, вот сейчас у меня есть tcp-сервер на Go. Ему в качестве параметров компиляции передаются номер порта, адрес хоста и ещё несколько параметров протокола обмена. Сам сервер уже написан и работает. Далее есть клиент, написанный на c++, которому в качестве параметров передаются те же самые значения, что и серверу. Клиент тоже написан и работает. Задача заключается в том, чтобы генерить оба эти сервера из одного cmake-скрипта. Я даже сделал такой скрипт и он действительно передает через параметры командной строки нужные опции в го-сервер. Но тут возникла проблема: горутины не видит аргументы командной строки так как они определены в другом потоке. Каналы позволяют передавать только данные стандартных типов. Map не передается через каналы (это, кстати, особенность ЯЗЫКА!!!).
В чем проблема пропарсить агри сунуть в структуку аля контекст и ими уже жонглировать?)
George
Ну, вот сейчас у меня есть tcp-сервер на Go. Ему в качестве параметров компиляции передаются номер порта, адрес хоста и ещё несколько параметров протокола обмена. Сам сервер уже написан и работает. Далее есть клиент, написанный на c++, которому в качестве параметров передаются те же самые значения, что и серверу. Клиент тоже написан и работает. Задача заключается в том, чтобы генерить оба эти сервера из одного cmake-скрипта. Я даже сделал такой скрипт и он действительно передает через параметры командной строки нужные опции в го-сервер. Но тут возникла проблема: горутины не видит аргументы командной строки так как они определены в другом потоке. Каналы позволяют передавать только данные стандартных типов. Map не передается через каналы (это, кстати, особенность ЯЗЫКА!!!).
Вы описываете тривиальнейшие проблемы, которым есть куча решений, если попытаться их найти. Для этого надо просто думать, а не копировать куски из примеров и отметать варианты как только они сходу не взлетели после минимальных изменений. Вы хотите съесть рыбу, а не научится её ловить.
George
1. Сборщик мусора в си++ не нужен. Но некоторые программисты используют умные указатели типа sharedptr: по сути это аналог сборщика мусора 2. То что несколько разных людей могли придти к одной идее, не сговариваясь, Вас удивляет?
1. Потому что эта задача отдана на откуп программистам ("ПЛОХОЙ ЯЗЫК! ПЛОХОЙ ЯЗЫК!") 2. Удивляет, потому что в моем окружении людей, в профессионализме которых я не сомневаюсь, такие телеги только в качестве шутки ходят.
George
У меня опять бомбит, поэтому я удаляюсь на какое-то время. Всем чмоке, не серчайте, берегите себя и своих близких.
Игроман
1. Потому что эта задача отдана на откуп программистам ("ПЛОХОЙ ЯЗЫК! ПЛОХОЙ ЯЗЫК!") 2. Удивляет, потому что в моем окружении людей, в профессионализме которых я не сомневаюсь, такие телеги только в качестве шутки ходят.
Я не говорил, что язык плохой. Проблемы бывают везде! Я обратился в тематическую группу за помощью. А мне тут говорят, что я плохо отзываюсь о языке! Ну, если просьба о помощи вызывает такую реакцию, то я, наверное, и в самом деле не в ту группу забрел!
Игроман
Ну, судя по тому, что это ЕДИНСТВЕННАЯ в Телеге русскоязычная группа по Go, то могу предположить, что сюда слетаются все, кто испытывает проблемы с интеграцией языка в свои разработки.
Игроман
Ну, найдут как. Традиционно по закону. Дадут два месяца на поиск работы, выплатят зарплату на несколько месяцев вперёд. То есть все законные ритуалы соблюдут. Но все равно ведь нехорошо
Игроман
Друже, я сверху написал возможное решение твоей проблемы)
Были предложения через tags и через ldflags. Но ни то ни другое у меня не заработало в языке. Например, при передаче тэгв go ругается, пишет, что все тэги должны заканчиваться на ".go". Я не нашел подробного описания работы с тэгами ни в Гугле ни в Яндексе и переключился на ldflags. Но там тоже самое: только флаги с предопределенными именами.
Игроман
Какая конкретно задача?
Да уже описал несколько минут назад. Пролистай вверх
Игроман
Да
🔥
Да
Так ты же написал что смог передать параметры компиляции
🔥
А по поводу тэгов Создаёшь файл к примеру main_abc.go С таким содержимым // +build abc package main import ( "fmt") func main() { fmt.Println("abc")} И компилишь это go build -tags abc
Игроман
Я СМОГ передать параметры в Go-сервер при его старте. Но у меня не получилось ИСПОЛЬЗОВАТЬ переданные параметры. Я понимаю, это звучит глупо: в конце-концов я мог бы определить в горутине дополнительные параметры и работать через них. Но очень важно сделать это, не затемняя основного функционала сервера. Это ведь тест. И мне надо придумать что-то такое, чтобы всякие служебные задачи (типо передачи параметров между горутинами итд итп...) не мешали лицезреть основную предметную логику
🔥
А можно пример посмотреть как ты сделал?)
На гитхаб чтоль пример закинь)
Игроман
А можно пример посмотреть как ты сделал?)
Пришлю чуть позже: щас я отошёл от компа
Игроман
Игроман
Вот отправил Для работы потребуется cmake версии 2.8
🔥
1. Тэги я тебя не нашел. 2. В чем проблема пропарсить агри сунуть в структуку аля контекст и ими уже жонглировать?
Игроман
1. Я сунул аргументы командной строки в map. В структуру нельзя, потому что аргументов может быть афигеееееенно много. 2. Эти аргументы потребуются в горутинах. В параметрах горутины передавать что ли?
Suleiman
Ребят не объясните за roundtripper? как то мутно объясняет мой гугл транслейт
Игроман
Или просто чтобы каждая горутина самостоятельно парсила бы аргументы командной строки?
🔥
`type App struct { Port int Param1 string Param2 int } func InitApp() *App { // Пропарсить арги и веруть апп return &App{ Port: 8080, Param1: "App", Param2: 123, } } func main() { app := InitApp() app.runServer() } func (app *App) runServer() { l, err := net.Listen("tcp", fmt.Sprintf(":%d", app.Port)) if err != nil { return } for { c, err := l.Accept() if err != nil { break } app.serverConn(c) } } func (app *App)serverConn(c net.Conn) { c.Write([]byte(fmt.Sprintf("%s, %d", app.Param1, app.Param2))) }`
🔥
вот тебе как пример
🔥
можно задать глобальные константы еще через лдфлагс
Suleiman
Roundtrip кругосветное путешествие?
Интерфейс в пакете http
Игроман
Суть не понимаю
Ну, вот если какой-нибудь демон начнет ходить по ссылкам сайта, выкачивая их. Рано или поздно он вернётся в начало. То есть процесс никогда не закончится. Иногда такой обход называю roundtrip, а демона (бота) -- roundtripper
🔥
А в горутины, которая обслуживает соединение пользователя как передавать?
Конечно будет. Ты бы базу почитал по глубже чтоб понимать как все работает тут) Ну или как минимум https://tour.golang.org/list
Игроман
Конечно будет. Ты бы базу почитал по глубже чтоб понимать как все работает тут) Ну или как минимум https://tour.golang.org/list
Будет только, если ее через параметры горутины передавать. А если стучаться к ней из горутины как к глобальной переменной -- не получится
🔥
Про map
А при чем тут мап?)
Maks
`type App struct { Port int Param1 string Param2 int } func InitApp() *App { // Пропарсить арги и веруть апп return &App{ Port: 8080, Param1: "App", Param2: 123, } } func main() { app := InitApp() app.runServer() } func (app *App) runServer() { l, err := net.Listen("tcp", fmt.Sprintf(":%d", app.Port)) if err != nil { return } for { c, err := l.Accept() if err != nil { break } app.serverConn(c) } } func (app *App)serverConn(c net.Conn) { c.Write([]byte(fmt.Sprintf("%s, %d", app.Param1, app.Param2))) }`
Только инит лучше я думаю сделать через настоящий инит. То есть что бы до запуска приложения прокомпилилось, через магический метод инит. Ну и еще мне интересно где связь между прекомпиляцией о которой было выше (препроцессор) и передаваемые параметры запуска приложения)
Игроман
А при чем тут мап?)
Ну параметров командной строки может быть много. Заранее знать все невозможно. Поэтому не структура, а map