Anonymous
Кто нибудь компилил код с использованием CGO для 32bit?
Ilia
может автозаменой? 🙂
так не интересно…
Anonymous
Уже который день безуспешно, капец
Nikita
Уже который день безуспешно, капец
Да просто в докере билди и не парься
Nikita
Кто нибудь компилил код с использованием CGO для 32bit?
CGO и кросскомпиляция по факту несовместимы
Daniel
тогда все скомпилякется без проблем
Anonymous
# github.com/mattn/go-sqlite3 ..\github.com\mattn\go-sqlite3\sqlite3_go18.go:18:10: undefined: SQLiteConn
Anonymous
Ставил tdm gcc, mingw
Andrei 🦉
А кто-то знает билдер sql-запросов, только не примитивный, чтобы поддерживал юнионы, with, with recursive?
я использую https://github.com/Masterminds/squirrel он не поддерживает union напрямую, но можно добавить его в запрос с помощью метода Suffix как показано здесь https://github.com/Masterminds/squirrel/issues/20
Александр
Кто нибудь компилил код с использованием CGO для 32bit?
под арм 32bit, как раз sqlite3, всё успешно компилируется: CGO_ENABLED=1 CC=arm-linux-gnueabihf-gcc GOARCH=arm GOOS=linux go build
Anonymous
А под винду?
Aleksey
MinGW ставить под винду, но есть ли там под арм...
Александр
вероятно, нужно указать компилятор для си, если он вообще есть, если нет — установить
Aleksey
https://sourceforge.net/projects/mingw-gcc-arm-eabi/
Aleksey
Нет
А, так под арм не надо? Тогда просто нужно установить GOARCH в 32 бита и указать CC
Serhii
Всем здравствуйте. Не могу понять как затянуть тип переменной в дочерний файл... никак не получается, помогите плиз
Serhii
ну я тоже так в принципе думал, спс
Anonymous
ну я тоже так в принципе думал, спс
Если я правильно понял, ещё можно синоним сделать type App somepackage.App
Oleh
Кто-то работал с "github.com/stretchr/testify/mock" ? У меня вопросы по мокам. В моке реализуются методы опеределенного интерфейса для того, чтобы потом передать мок в метод, а для чего потом используют их же в методе On() и Return() и в Return() мы сами устанавливаем значения и нам всё равно, что метод вернет ? И как потом в нашем методе,в который мы передаем мок используются те данные, которые мы зассэтили в Return() ?
Евгений
иначе говоря, плохо, если у тебя model.Save(), потому что нарушается разбиение по слоям: модель что-то знает о базе данных. лучше, если modelRepository.Save(model)
а зачем ей что-то знать? в ней может быть указатель на репозиторий а сама модель в методе model.Save() делает только m.repository.Save(m) репозиторий - это интерфейс, который сам понимает как ему надо что-то сохранять. Тогда и общий интерфейс у разных моделей, и даже разные хранилища для разных инстансов. только модель становится более сложной.
Илья
On() - укзаывается метод, в Return указывается возврат, в самом методе вы получается args := m.Called(args) - и у args вызваете Get(N) - получит аргумент по номеру N
Илья
суть в том, что до вызова функции вы описываете ее поведение
Илья
честно говоря, мне этот подход всё больше кажется избыточным и я смотрю в сторону https://github.com/bouk/monkey
Denis
модель - это бизнес-логика, и знать о том что она там где-то в какой-то базе хранится не должна
Евгений
а как сервис связан с моделью? она знает из какого она сервиса? или он синглтоном присутсвует во всем приложении?
Oleh
суть в том, что до вызова функции вы описываете ее поведение
А каким образом мок хранит то, что мы указали в Return() и как потом метод, который мы тестируем узнает, что из мока нужно достать именно эти данные?
Denis
а как сервис связан с моделью? она знает из какого она сервиса? или он синглтоном присутсвует во всем приложении?
сервис - это такая штука, которая управляет моделью, и сервис о ней знает. модель о сервисе - нет. например: у тебя есть эндпоинт, где пользователь добавляет новый товар в свой заказ. этот эндпоинт вызывает метод сервиса по добавлению нового товара. сервис из репозитория достает модели товара, заказа, вызывает у них бизнес-логику(различного рода валидации и прочее), затем вызывает репозиторий чтобы сохранить эти модели в базу, и возвращает результат эндпоинту, а тот уже передает клиенту.
Andrey
т.е. сервис = контроллер?
Илья
А каким образом мок хранит то, что мы указали в Return() и как потом метод, который мы тестируем узнает, что из мока нужно достать именно эти данные?
в On() вы казываете имя метода и агументы, при вызове Called вы передаете аргументы а из caller он вытаскивает метод
Евгений
т.е. не актив рекорд, модель полностью пассивна
Denis
т.е. сервис = контроллер?
ну можно и так сказать. ключевая идея - развязать слои друг от друга. модели ничего не знают о том как хранятся и используются, но реализуют бизнес-логику. репозиторий знает как хранить модели, но не знает как используется. сервис управляет этим делом, но не знает через что он работает: RPC, http, или это консольный клиент
Denis
т.е. не актив рекорд, модель полностью пассивна
активрекорд - это антипаттерн, нарушающий как минимум SRP, но сцуко антипаттерн удобный, во всяком случае для небольших приложений :)
Евгений
фагт )
Andrey
это я про актив рекорд и "небольшие" приложения
Евгений
если модели бизнес-логика и скажем логика говорит, что эти два товара вместе должны быть заменены на какой-то отдельный набор. Модель должна каким-то образом сигнализироваь об этом сервису, чтобы он удалил эти модели и взял другие. Специфической ошибкой валидации? Или она сама дожлна заменить другие модели? То есть получается какая-то активность.
Евгений
в пхп не знаю.. мне нравится как это сделано в Django - очень просто и удобно
Denis
в пхп не знаю.. мне нравится как это сделано в Django - очень просто и удобно
как и в рельсах и прочих фуллстек фреймворках. это удобно только пока ты пишешь бложик
Aleksandr
т.е. сервис = контроллер?
то что вызывается в контроллере
Aleksandr
т.е. не актив рекорд, модель полностью пассивна
пассивна в контексте хранилища, но активна в контексте присутствующего в ней поведения
Евгений
вопрос про то, как логика из модели может взаимодействовать с логикой сервиса. Как лучше организововывать это взаимодействие
Alexander
с таких вопросов ничинается спор о том где должна быть логика. В сервисах или в моделе
Я для себя этот вопрос решил - логика в сервисах UseCase, которые вызываются из контроллера, а внутри используют тупые модели и тупые репозитории.
Denis
Точно?
хочешь позащищать рельсы?)
Andrey
модель сама может это уметь
модель, которая модифицирует другую модель? я бы за такое отстреливал
Aleksandr
метод? =)
контроллер - это то, что получает запрос извне и передает его обработку сервису
Serhii
посоветуйте валидатор jsoт для go
Евгений
модель сама может это уметь
вызывать сервис? то есть нужно в ней хранить указаель ан сервис или какой-то коллбек?
Aleksandr
модель, которая модифицирует другую модель? я бы за такое отстреливал
почему нет? начинай конкретизировать, чтобы мы модель одинаково понимали. это широкое понятие
Aleksandr
вызывать сервис? то есть нужно в ней хранить указаель ан сервис или какой-то коллбек?
зачем сервис вызывать? пришел запрос, запрос передается в сервис, сервис на основе запроса что-то делает с сущностями, сохраняет их в репозитории. на какой стадии нужна обратная связь между моделью и сервисом?
Aleksandr
ты конкретный пример скажи, разберемся как это будет работать
Евгений
зачем сервис вызывать? пришел запрос, запрос передается в сервис, сервис на основе запроса что-то делает с сущностями, сохраняет их в репозитории. на какой стадии нужна обратная связь между моделью и сервисом?
У меня немного по-другому сделано, поэтому сходу не могу привести пример, который хорошо подойдет к этому варианту. Например, конфигуратор автомобилей. Есть масса опций, которые вместе образуют пакет. Допустим, человек положил в корзину зеркала с подогревом и подогрев стекла. Мы видим, что это "Зимний пакет" и его заказ должен быть заменен на него.
Andrei 🦉
Спасибо, я как раз сквирел самый первый увидел, но пропустил как-то мимо глаз.
там есть следующая хитрость на которой легко споткнуться, если шлете запросы в бд с помощью метода RunWith если используете не стандартные DB или Tx, а, например, их расширения из sqlx, то суслик молча это проглотит, но запросы слать не будет фикс для такого случая - передавать стандартные структуры, хотя сигнатура метода этого явно и не требует, например, q.RunWith(sqlx.DB.DB)
VF
Большое спасибо всем кто откликнулся на опросы по языкам разработки и ЗП - https://www.screencast.com/t/dAVwHnJWNibr Результаты тут: https://dou.ua/lenta/articles/salary-report-dec-2017 https://github.com/devua/csv/tree/master/salaries https://dou.ua/lenta/articles/language-rating-jan-2018 https://github.com/rssh/dou_pl_questionare
VF
Denis
У меня немного по-другому сделано, поэтому сходу не могу привести пример, который хорошо подойдет к этому варианту. Например, конфигуратор автомобилей. Есть масса опций, которые вместе образуют пакет. Допустим, человек положил в корзину зеркала с подогревом и подогрев стекла. Мы видим, что это "Зимний пакет" и его заказ должен быть заменен на него.
в таком случае можно сделать модель "корзина", у которой есть "товары", и которая при добавлении новых товаров может схлопнуть/зменить уже существующие на какой-то другой. Или это может быть отдельный класс, реализующий такую бизнес-логику
Aleksandr
3-я ссылка битая
на графиках плохо видно названия языков. мотивации нет всматриваться
Евгений
тогда бизнес логика вне модели
Denis
тогда бизнес логика вне модели
нет, почему? корзина - это тоже модель.
🏁Александр
пофиксал
с РФ не открывается 🙁
Евгений
а как корзина будет сохранять изменения?