• Я усложняю или так правильно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Если ты начинающий - то лучше написать работающее приложение. А архитектура должна быть мотивированной.
    Вот в книжках по шаблонам проектирования так и пишут дескыть motivation.

    А если на пустом hello world делать архитектуру - то оно выглядит как-то странно. И принцип KISS/Yagni
    никто не отменял. И бритву Оккама.
    Ответ написан
    2 комментария
  • Как лучше всего замапить запрос в структуру?

    Для слоя базы данных лучше всего иметь отдельные структуры, из которых потом данные перекладывать в слой бизнес-логики. Причем, лучше всего чтобы перекладыванием занимался пакет, ответственный за базу данных.
    Для слоя АПИ тоже лучше свои отдельные структуры, в них перекладывать должен слой АПИ.
    Слой бизнес-логики (модель) должен быть чистым от любых транспортных имплементаций и не импортить никакие пакеты базы или АПИ. Это наоборот, база и АПИ должны импортить в себя структуры бизнес-слоя, чтобы их возвращать и принимать.
    Короче, это я кратко про букву D в слове SOLID.
    Ответ написан
    2 комментария
  • Как одна горутина может обращаться к переменной из стэка другой горутины?

    megakor
    @megakor Автор вопроса
    Go/PHP developer | Вконтакте
    Я сделал escape анализ и выяснил, что компилятор умный и предугадывает такие моменты и создает переменную сразу в heap.
    Ответ написан
    1 комментарий
  • Как правильно описать интерфейсом структуры?

    @12rbah
    может правильнее было бы сделать абстр фабрику
    Это и так не самый частый паттерн для применения, а в го тем более. Если хотите через интерфейсы делать, то фабрики хватит. Вообще хз зачем тут так извращаться, по факту в го проще разделить реализацию по пакетам и создавать нужный объект через NewProvider и затем уже делать с конкретной структурой всё что нужно.
    У разных банков, будут разные параметры метода Run, получается, я не могу описать структуры интерфейсом
    Напишите что вы хотите сделать, по ощущениям вы сову на глобус натягиваете.
    Есть структура с методом, который принимает на вход массив платежей и некий ключ, который определяет какой банк использовать.
    Если это то ссылки то фабрики тут хватит, вообще если вы не понимаете зачем вам нужны паттерны, то лучше не использовать их
    Ответ написан
    Комментировать
  • Как провести итерацию функций в map?

    Старайтесь никогда не использовать пустой интерфейс (interface{}), только в самых крайних случаях.
    Тут вам нужно просто изменить тип мапы на map[string][]func(string, interface{})

    Не знаю, почему shortName у вас тоже имеет тип interface{}, его бы изменить на конкретный тип или конкретный интерфейс. Тогда код станет еще понятнее и удобнее.
    Ответ написан
    Комментировать
  • Как ускорить работу кода?

    Для таких целей отлично подходит паттерн "worker pool"
    https://gobyexample.com/worker-pools

    Создаете воркеров столько, сколько параллельно урлов хотите обрабатывать. Отправляете в канал не слайс урлов, а урлы по-одному. Каждый воркер берет из канала свой урл и все они параллельно обрабатывают разные урлы.
    Ответ написан
    1 комментарий
  • Почему не устанавливается пакет chi с помощью go get?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    Вики по GOPATH.
    GOPATH подход устарел и с 1.16 версии по умолчанию используются модули.

    Если вам так нужен проект в GOPATH, то можно отключить модули:
    GO111MODULE=off go get github.com/go-chi/chi/v2

    В режиме модулей зависимости сохраняются в кэше.
    Их можно перенести в проект командой go mod vendor, и зависимости перенесутся в папку vendor рядом с файлом go.mod.

    При сборке проекта зависимости автоматически скачиваются в кэш.
    Ответ написан
    1 комментарий
  • Зачем нужны "ссылочные" методы и почему они не удовлетворяют интерфейсам?

    func (h *Human) Speak() {
    
    }

    Если глянуть на внутренности языка, то метод это по сути обычная функция, у которой первым параметром является ресивер (тот объект, у которого вызывается метод). То есть, компилятор этот код превратит в
    func Speak(h *Human) {
    
    }

    Соответственно, при вызове метода в случае *Human будет передача структуры по указателю, а в случае Human, по значению, со всеми вытекающими.

    Что касается ошибки про несоответствие интерфейсу, то тут надо учесть, что если у структуры определены методы через указатель, то и соответствовать интерфейсу будет указатель на эту структуру: https://go.dev/play/p/o7EsGmeYSRS
    Если же без указателя, то соответствовать интерфейсу будет сама структура: https://go.dev/play/p/oTsXP4DXaMJ
    Но оба одновременно определить не получится.
    Ответ написан
    Комментировать
  • Когда использовать RWMutex вместо Mutex?

    WinPooh32
    @WinPooh32
    Stack Overflow answer searching expert
    В случае с обычным мьютексом возможен только эксклюзивный доступ к ресурсу, т.е. только один поток имеет доступ для чтения или записи.
    А когда у нас RWMutex, то количество потоков при чтении неограниченно, но при обращении на запись доступ становится опять эксклюзивным только для одного потока.

    RWMutex используется для увеличения пропускной способности, когда к ресурсу чаще обращаются на чтение, чем на запись.
    Ответ написан
    Комментировать
  • Есть ли на русском полный учебник по GO?

    @Spargwy
    20 годиков. Голанг баккенд девелопер
    "Язык программирования Go" от создателей
    Но он 2014 вроде, так что некоторых тем может не быть. Наверстаешь в доке.

    UPD: А вообще го не такой объёмный язык. Намного больше времени потратишь, чтобы понять КАК на нём писать, а не на его функционал.
    Ответ написан
    Комментировать
  • Почему парсинг на Golang тратит больше времени для выполнения работы, чем парсинг на Python?

    @kirillinyakin
    Судя по коду на голанге вы посещаете каждую страницу, а на питоне вы просто получаете атрибут href
    Ответ написан
    1 комментарий
  • Как правильно передать множество параметров в функцию в Golang?

    @nakem
    В некоторых кейсах функциональные опции могут оказаться более подходящим решением.
    Дейв Чейни подробно писал об этом https://dave.cheney.net/2014/10/17/functional-opti...
    Ответ написан
    Комментировать
  • Нужен ли Nginx для веб приложения на Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Не нужен, в Go есть полноценный веб сервер.

    Nginx есть смысл использовать в случае если есть необходимость обслуживать больше одного домена на одном и том же IP:Port, ну и для раздачи статики (изображений, CSS, Javascript и т.д.)

    Еще есть смысл использовать Nginx когда у вас большая нагрузка и ваш сервис на Go работает на нескольких серверах - Nginx'ом можно балансировать нагрузку между этими серверами.
    Ответ написан
    9 комментариев
  • Как правильно передать множество параметров в функцию в Golang?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    В таких случаях лучше передавать структуру как параметр.
    Пример
    type User struct {
        Name string
        Email string
        // все нужные поля далее
    }
    
    func CreateUser(r.Context(), user)
    Ответ написан
    Комментировать
  • Как хранить большую таблицу с одинаковыми значениями?

    rozhnev
    @rozhnev
    Fullstack programmer, DBA, медленно, дорого
    Вот например так: таблица справочник значений и основная таблица:
    create table datavalues (
    	id serial primary key,
      	value text -- json or any suitable type
    );
    
    create table manydata (
    	id bigserial primary key,
      	value_id int,
      	inserted_at timestamp with time zone default current_timestamp,
      	updated_at timestamp,
        foreign key (value_id) references datavalues(id)
    );
    create index on manydata(value_id);


    PosgreSQL fiddle
    Ответ написан
    1 комментарий
  • Как хранить большую таблицу с одинаковыми значениями?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    И что страшного в миллионах записей? Тем более, что вы говорите - скорость выборки не принципиальна.

    Если переживаете за место - поюзайте какой-нибудь метод компрессии.
    Ответ написан
    Комментировать
  • Программа Win 10 Tweaker это вирус?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Нет конечно.
    Обычная вредоносная программа.
    Откуда у вируса возьмется графический интерфейс?

    Вирус это программа которая "размножается" - создает множество своих копий.

    Если нет, то стоит ли её использовать?
    Если вы хотите вывести из строя ОС - вполне стоит.
    Ответ написан
    1 комментарий
  • Программа Win 10 Tweaker это вирус?

    @Mefist
    Купил версию PRO, потом провёл апгрейд компьютера, поменял материнку и процессор, в FAQ на сайте указано, что перенос можно выполнить 1 раз при обновлении компьютера, хотя программа привязывается к железу и нет никакой проблемы аннулировать активацию к старому и пере активировать на новое. Была версия 15.2 и приходит письмо на почту, что вышла версия 16 и что старая версия не будет обновляться и нужно скачать новую и в письме код активации. Скачиваю новую версию, выбираю пункт что у меня уже есть PRO и вместо предложения ввести код активации, мне предлагают купить опять PRO за 820р. никакой код, никуда ввести не предложила программа. Самое интересно, что старая версия 15.2 продолжает работать со статусом PRO, а новая просит покупки. Я обратился на почту к автору программы и указал о том, что у меня не активируется новая версия, а старая работает. На что получил ответ, что он не обязан был мне вообще делать повторную активацию, хотя она прописана в его же правилах, причём писал это использую не нормативную лексику в мой адрес. То, что автор скрывается от налоговой это понятно, хотя нет, не понятно, покупают по всей РФ и потенциальных покупателей очень много, можно было бы уже давно официально продавать программу. Вот поэтому он и делает что хочет, так как защита прав потребителей на него не распространяется. Меня это совершенно не касается, официально он работает или нет, да и всех пользователей то же. Мы платили деньги за лицензию и то, что её отбирают, вот это сюрприз.

    Не рекомендую связываться, хоть программа и хорошая, но автор делает что хочет и когда с вас повторно начнут просить денег неизвестно.
    Ответ написан
    1 комментарий
  • Программа Win 10 Tweaker это вирус?

    Zoominger
    @Zoominger Куратор тега Windows
    System Integrator
    Нет.
    Это убогая недоработанная поделка, которой вы только навредите системе.
    Ответ написан
    Комментировать
  • Можно ли самому изучить программирование логических контроллеров?

    gbg
    @gbg
    Любые ответы на любые вопросы
    ПЛК программируются на одном из стандартных языков

    С и С++ в этом списке нет, есть подобия

    Знания и методы программирования, которые пригодны для программирования ПК, для ПЛК не годны, там своя специфика.

    Связано это с тем исторически, ПЛК заменили собой релейные схемы. А релейная схема работает не в виде исполнения последовательности инструкций (как работает ПК), а в виде переходов между состояниями (читать в вики "автомат с конечным числом состояний"). И для того, чтобы перенести все наработки старой доброй релейной логики (и разработчиков), ПЛК сделали удобным для такого программирования.

    Главное, что нужно для этой разработки - практика на реальном железе, то есть стенды, контроллеры и софт для программирования. Чисто теоретически, в каких-то симуляторах можно научиться только пониманию специфики, но вот отладка/наладка - это только реальное железо с реальными глюками.

    Цифровая электроника здесь стоит не на первом месте, в ПЛК с точки зрения электроники никто серьезно не полезет (потому что убытки от поехавшего крышей ПЛК могут легко и многократно перекрыть стоимость замены сдохшего). Достаточно обычной науки о контактах и понимания закона Ома.

    Чтобы прикинуть свои силы, попробуйте прямо здесь набросать, как вы при помощи ПЛК будете автоматизировать работу простого советского воздушного компрессора, который кто-то захотел подключить к SCADA-системе в своем гараже.

    -какие нужны датчики
    -какие нужны исполнительные механизмы
    -как обеспечить безопасную работу машины при поехавшем крышей ПЛК
    Ответ написан
    Комментировать