Aleksandr
смотрел docdown для перевода doc.go в readme не впечатлило
Aleksandr
@vetcher а вы хостите документацию по приватному проекту в облаке? Или в ридми пишете про запуск сервера с докой (godoc -http...)
Artem
@vetcher а вы хостите документацию по приватному проекту в облаке? Или в ридми пишете про запуск сервера с докой (godoc -http...)
Доку для сервисов мы размазываем по разным местам: пакет flag для параметров запуска, в readme общую инфу и описание полей конфига (которое генерится самопальным генератором) а логику и всякое такое уже вообще не в сорсах, а в confluence/Jira Но godoc как бы можно не пользоваться особо, если через ide работаешь, там ж можно прыгнуть к методу и прочитать
Andrey
Парни, привет. Есть вот такой примерчик https://play.golang.org/p/JhgLHv7zUJP Могу я как-то в prepareNewID2 сделать то, что там описал?)
Andrey
Возможно, конечно, что я хочу странного. Но вот есть такой вопрос. Я немного плаваю в этом
Daniel
а почему вы там Cacher получаете, а не *MemCache
Andrey
Хм, вот так? func prepareNewID2(c *MemCache) { newMemCache := MemCache{ID: 40} *c = newMemCache }
Andrey
Сейчас посмотрю, насколько это ко мне применимо. Возможно, просто загнался
Andrey
Но это в какой-то момент мне надо будет разветвляться в зависимости от реализации интефейса и для каждой реализации свои функции делать
Daniel
смотрите
Andrey
А этого как раз хотелось бы избежать
Daniel
если две структуры у вас совпадают абсолютно - можно их присваивать одну другой
Daniel
а если не абсолютно - только копирование по полям
Andrey
Сек, опишу пару строк более конкретно
Subbotin
если две структуры у вас совпадают абсолютно - можно их присваивать одну другой
Ээээ? А разве компилятор не ругается на нарушение типов?
Andrey
Хотя быстро не получится, надо будет сейчас еще про себя все пройти разок)
Andrey
Возможно, способ с разветвлением по конкретным реализация для меня будет достаточным (хоть и не очень красивым)
Subbotin
А. Так да
Daniel
а как еще
Daniel
но если нет полного совпадения - конверсия не пройдет
Daniel
даже если порядок полей другой
Subbotin
а как еще
Ну в теории b = a
Daniel
это имплицитная была бы конверсия, а она зашквар
Subbotin
Во всяком случая я так понял фразу про приравнивание и офигел
Konstantin
👌
Anonymous
да хрен его знает. у логруса есть неприятная черта - он не умеет в вывод добавлять файл:строку, из которой его позвали. поэтому я от него отказался навсегда в 2015
мы используем логрус + pkg/errors чтобы получить номер строки. Есть ли у structlog и zap преимущество в этом отношении?
Aleksandr
Хотел бы еще мнение послушать косательно "Всем привет, разбирался ли кто с godoc ? Какой bestway для документирования проекта? У golang в некоторых cmd/...... и readme.md есть и doc.go.. Не хочется вести документацию в двух разных файлах, или там иной смысл?"
Daniel
мы используем логрус + pkg/errors чтобы получить номер строки. Есть ли у structlog и zap преимущество в этом отношении?
Не думаю. structlog, кстати, слегка пересекается с errors - там есть метод, который и логирует, и возвращает ошибку errors дает не строку, а стектрейс, насколько я помню. Это в большинстве случаев избыточно. Кроме того, этот стектрейс тяжело читать.
Daniel
мой ответ - structlog, и логировать ошибку на каждом уровне, где она пробрасывается выше
Daniel
и стектрейс, и лог
Daniel
но я осознаю, что мой путь - маргинальный
.
Допустим есть у нас пул БД. как архитектурно предпочтительнее: инициализировать в мейне и пробрасывать указатель сквозь слои, либо же инициализировать в переменной в отдельном пакете и импортировать где надо?
Daniel
архитектурно предпочтительнее пробрасывать
Daniel
это делает очевидным использование db в том или ином модуле
Daniel
ага
p0rsche
такой вопрос - есть у меня воркеры, спавнят процессы. Их количество заранее неизвестно, но между процессами передают контекст. Если остановить пул, спавненные процессы не помирают, нужно их убивать отдельно. Вопрос: какой механизм синхронизации добавить в контекст, чтобы внутри кода исполнения процесса слушать его и при появлении там, скажем, сигнала, рубить процесс?
p0rsche
я не совсем догоняю, как "расшарить" один канал на неизвестное количество воркеров, и чтобы каждый из этих воркеров слушал его, и при появлении определенного сигнала (или, скажем, при закрытии канала) исполнялся бы код\
Daniel
что такое "процессы"?
p0rsche
внешние по отношению к Go процессы, системные
p0rsche
не горутины
p0rsche
но сами воркеры работают внутри горутины
Daniel
тогда туда вы канал не расшарите никак
p0rsche
туда нет, но в горутину же можно
Daniel
но если этот системные процессы - система сама прибьет их при убийстве родителя
Daniel
если они detach не сделали, конечно
p0rsche
я скрестил gocraft/work для очередей и go-cmd/cmd для спавна процессов
p0rsche
получается, пул я могу остановить, но вот отспавненные процессы продолжают работать
p0rsche
sync.Cond
тоже смотрел туда, а есть пример?
Pavel
в доке есть пример, вроде
p0rsche
Once Pool WaitGroup
p0rsche
загуглю
🏁Александр
я вот все в сомнениях
🏁Александр
dao держать каждую сущность отдельно или в общем пакете dao_имябд
🏁Александр
с точки зрения: * тестирования * архитектуры (что бы не получить циклическую зависимость)
Me
Джентс, какую либу посоветуете для веб скрепинга а-ля bs4 ?
Me
Нужно заглянуть в табличку и проверить, что там есть значения Это для мониторинга приложения
Artem
я вот все в сомнениях
ты вроде уже полгода все спрашиваешь про дао, но так и не закончил? сделай репами уже наконец
🏁Александр
я все еще не могу определиться 🙂
🏁Александр
и так и так пробывал
Daniel
коллега, подбросьте монетку
🏁Александр
да причем тут монетка
Daniel
раз вы не можете определиться - у вас просто не хватает знаний
🏁Александр
все таки у меня был вопрос как "религиозно правильно"
Daniel
раз вам тут никто не отвечает - этих знаний нет ни у кого
Pavel
да причем тут монетка
Страдаешь словно не можешь будущее предсказать.
Artem
все таки у меня был вопрос как "религиозно правильно"
хз как там с дао, а на репы через интерфейсы у меня хорошо ложатся дополнительные слои с логикой
Daniel
значит - надо просто идти вперед и набивать шишки
🏁Александр
мне охото же "окончательную версию архитектуры"
Daniel
это заболевание профессиональное