George
А что вы пишете на си , если не секрет?
На си - программный рутер. Пакеты обрабатываем и пересылаем.
George
В юзерспейсе через dpdk, если ещё чуть подробнее. Векторами, чтобы попроизводительнее. Ибо надо многие гигабиты осилить.
Таршиш
Я однажды делал своего рода драйвер под Винду и там забыл закоментить инклюд вылезло 3к ошибок на проект примерно в 500 строк кода)
Человек всегда находится между двух крайностей. Именно поэтому многих очень тянет на связку Go+c++
Таршиш
А что вы пишете на си , если не секрет?
В двух словах трудно сказать. В основном системы измерения и управления сложными роевыми системами. Между задачами приходится писать самому себе инструментарий, которыы может ускорить процесс работы над будущими задачами. И с этой неопределенностью очень помогает справляться гибкость языка, его абмтракции. А когда приходит конкретная задача, я наследуюсь от абстрактых классов. То есть без ООП я бы просто завалил все сроки
Maks
Абстрактный класс с логикой?
Maks
В го же в целом можно сделать это через композицию думаю
Maks
А так интерфейсы есть везде же
Maks
Просто в го надо понять подход
Maks
И тогда будет в целом все плюс минус так же
Maks
Так же на абстракциях можно и в пхп и шарпе писать в таком случае. Они тоже получается гибкие.
Maks
Единственное чего не хватает это джинериков
Maks
Но и их в го скоро завести должны вроде как
Maks
сел за ноут без мышки, и понял что катастрофически не хватает кнопки на клаве или тачпаде назад, как на мышке0
Maks
Кстати в озоне несколько тысяч микросервисов
Vitaliy
Если я за месяц не смогу найти нишу для Go, то уволят шестерых гошников, которые пока ещё трудоустроены
Кажется, если так ставится вопрос, то и хорошо. Причем для самих гошников. Даже если найдете нишу, то у людей, которым пришлось что-то доказывать, все равно осадочек останется. Лучше, быть может, работать там, нде уважают? Тем более... Выходные пособия!
Denis
Ребята, скажите, а я должен или не должен использовать vendor в проекте?
Maks
Ребята, скажите, а я должен или не должен использовать vendor в проекте?
у меня кстати такой же вопрос) Я пока не до конца вкурил как внешние либы правильно юзать)
Maks
всё я понял
Maks
крч если у тебя есть внешние зависимости, то ты пишешь go mod vendor
Maks
и он тебе либы затаскивает в проект
Maks
именно в папку вендор
Vitaliy
именно в папку вендор
И ты всю это тряхомудию тянешь в проекте в репу...
Maks
не, вендор только локально
Maks
у тебя в го мод прописывается версия библиотеки
Maks
и грузится либа
Maks
что бы все работали с одной либой
Maks
Просто если у тебя либа будет глобально стоять, то в разных проектах могут быть разные версии этой либы
Maks
Правильнее сказать пакета
Vitaliy
А, видел, что в репы вендор тащат.
Maks
И соответственно может что то не работать или работать не правильно, или конфликтовать
Maks
Иногда в репу тащат вендор по той причине, что боятся что либа которую ты используешь пропадет из гита
Vitaliy
Или модули
Vitaliy
Хз какая терминология
Maks
Щас попробую узнать почему надо го вендор юзать а не го гет
Maks
крч мне говорят если у тебя модуль то он будет искать пакет в вендоре
Maks
если го мод файл есть
Maks
а если нет то в го пас
Maks
в общем принято юзать вендор
Maks
его и юзай)
Maks
Го пас типо легаси, до прихода модулей юзали
Maks
Для либ
Maks
Или когда ты делаешь прилу не модулем, но щас так не делают
Maks
Щас нам расскажут)
Роман
Го пас типо легаси, до прихода модулей юзали
О, большое спасибо за разъяснение. Тоже сегодня какое-то время потратил, чтобы разобраться в теме модулей. Эта ветка диалога ответила на многие оставшиеся вопросы :)
Maks
Все же говорят типо могут быть траблы если у тебя несколько проектов разные версии либы юзают, по этому и придумали вендор, но точно я хз
Maks
sort.Slice(твойСлайс, func(i, j int) bool { return твойСлайс[i].полеСтруктуры < твойСлайс[j].полеСтруктуры})
Maks
Вроде так
Maks
Еще говорят для зависимостей прокси юзают, но я пока ваще не в курсе что там к чему
Maks
Ага, это что бы когда либа пропадает с гита у тебя оставался кеш этой либы
Maks
Но такое бывает супер редко
Vladyslav
именно в папку вендор
Получается вендор это что то типо node_modules, я правильно понял?
Maks
Ага
Maks
Можно глобально но лучше локально)
Vladyslav
Нужно будет тогда потыкать этот вендор и поставить все по фен шуй, как в озон)
Null
🔝 Интерфейсы в Go для повышения тестируемости кода https://nuancesprog.ru/p/4671/ @Golang_google
Maks
Но, как я уже говорил, это крайне редко и есть так называемый кеш либ таких для го
Maks
Плюс можно свой сервис намутить
Maks
Прокси для библиотек
Maks
Который будет например в той же сиайке качать репы через проксю которая будет их кешировать
Maks
Это лучше чем в репе хранить
Maks
Кто имеет большой опыт в го. Почему при создании инстанса какого либо объекта(структуры) везде используют создание через метод явный, типа apiserver := apiserver.New() а не apiserver := apiserver.ApiServer{}
Maks
То есть 4 способа есть для создания экземпляра с дефолтными параметрами, которые будут идентичны
Maks
1. myType := new(mypackage.MyType) 2. myType := mypackage.MyType{} 3. myType := mypackage.New() 4. var myType mypackage.MyType //mytype.go package mypackage type MyType struct {} func New() { return MyPackage{} }
Maks
Но если нужны не стандартные значения полей структуры, подойдут больше 2 и 3 способы, которые будут аналогичны?
Maks
Я в 3 тож могу указатель возвращать
Maks
Точно, понял.
George
Но если нужны не стандартные значения полей структуры, подойдут больше 2 и 3 способы, которые будут аналогичны?
На знаю что там под New(), вполне вероятно что там просто второй вариант скрыт без дополнительной логики ( MyType{} ). В таком варианте New может документировать use Case. Пример - context.TODO() и context.Background()
Maks
Так я же описад функцию нью своего пакета. Ладно, мы тут вроде разобрались.
George
Да, я в целом про получение объекта через функцию когда можно напрямую
George
Даже при отсутствии логики инициализации
Maks
Все же лучше использовать функцию я думаю глобально всегда.
Maks
То есть принять что то за стандарт
Maks
Что бы не было иных вариантов по коду
George
Хорошая логика, консистентность наше всё