
Александр
26.09.2018
17:15:17
я решил на уровне main прокинуть в фабрику контейнер, а потом его там "растребушить" при инициализации


Roman
26.09.2018
17:15:21
Looking at my current GraphQL API testing Go code I just had an idea of making GraphQL tests more declarative, because tests are what you want to be very easy to read and understand, error-prone testing is the worst!
1. define a query
2. define test conditions
3. define the expected parametric result
4. define expected conditions
5. implement the declared conditions in Go code
6. optionally, define the tests dependencies on other tests
You'd generate the actual test code using gqltestgen ./, it'll collect all .gqltst files, parse them, generate a apitestsuite_test.go which can then be executed with go test -v -race
This would also allow generating an API test coverage.
The dependencies (test hierarchy) are useful to determine which tests should be run first to avoid having test query.user fail before mutation.createUser if actually the user creation mutation fails, not the user query node.
What would you say? Do you like this idea? Do you think it's somehow limited or anything?
Please don't hesitate to share your thoughts with me :leichtes_lächeln:


Aleksandr
26.09.2018
17:15:30

Google

Roman
26.09.2018
17:15:33
извиняюсь за английский, но переписывать на русский лень)

Александр
26.09.2018
17:16:08
да, норм
так вопрос то в том, что если компонент который там вызывается и зовет другие компоенты
по хорошему он бы тоже мог контейнер дальше переслать...

Aleksandr
26.09.2018
17:17:21

Александр
26.09.2018
17:17:46
у меня есть webserver
самому ему зависимости не нужны никакие
но хедлерам его нужны
поэтому он получает экземляр контейнера и без "требушения" кидает в хенделы
можно сделать по другому, выдрать инициализацию хендлеров "наверх" и там их иницилизировать
и скормить ему же уже накормленные
поэтому тут два варианта

Artem
26.09.2018
17:20:18
Да вроде все в main инициализировать нужно

Александр
26.09.2018
17:20:20
Первый:
serv := http.NewWebServer(app)
serv.Lisner() // Для main не существует больше никаких суб зависимостей, они спрятаны внутри

Google

Александр
26.09.2018
17:20:23
второй
routes := handlers.NewRouters(app) // Мы вытащили зависимость наверх
serv := http.NewWebServer(app)
serv.Lisner(routes)
в принципе мне кажется что второй вариант правильней
но он несколько более многословный, что и смущает

Aleksandr
26.09.2018
17:34:00
ну вот я делаю пакет container, который состоит только из геттеров/фабрик. таким образом вся инициализация в одном месте. В остальном коде я только получаю готовые инстансы.

Pawel
26.09.2018
17:53:59

Sergey
26.09.2018
18:02:43
древнее зло пробудилось

Dmitriy
26.09.2018
18:14:28
коллеги, а есть ли у кого-нибудь проект в открытом доступе на swagger, в котором можно подглядеть как правильно разбивать спеку на несколько файлов?

Vladimir
26.09.2018
18:59:59
+1

Georgy
26.09.2018
19:28:12
А кто какие библиотеки использует для работы с Docker API и как вы их мокаете? С Go работаю недавна, и вот встала передо мной такая задача

Marlik
26.09.2018
20:04:58
@ruelephant не покажешь кусок кода, как мне указатель на пул коннектов в листен передать? Ты вроде бы это делал. В одном файле проблемы нет, но когда хочу разнести по разным пакетам херня получается. То есть хэндлер лежит в db файле, и по другому что-то не втыкаю.

Александр
26.09.2018
20:11:56
O_o

Marlik
26.09.2018
20:13:15
Я вот так хочу
- bin
- user
-- model.go // package user
- cmd
-- appname
---- main.go // package main
- shared
-- libname
---- any.go // package libname
---- test.go
-- libnameTwo
---- any.go // package libnameTwo
---- test.go
- vendor
-- github.com
---- ....
что-то такое
"user" это домен, сам себе режиссер без зависимостей
если их много, то можно положить в entities
Только у меня есть ещё папка db, и хочется там все запросы оставить к базе.

Александр
26.09.2018
20:21:41
ну

Marlik
26.09.2018
20:21:43
Кажется нашёл статью, https://habr.com/post/269893/

Александр
26.09.2018
20:21:44
в чем трабла то?

Marlik
26.09.2018
20:27:44
ну
Вот в чём, это образец:
func main() {
var p db.Handler
db, err := p.InitDB()
if err != nil {
log.Fatal(err)
}
router := fasthttprouter.New()
router.POST("/", db.getHandler)
go func() {
log.Fatal(fasthttp.ListenAndServe(":4000", router.Handler))
}()
}
func (p *Handler) getHandler(ctx *fasthttp.RequestCtx) {
...
}
getHandler отработает только если будет лежать в папке db. Но хэндлеры как-то не красиво там обрабатывать? Есть варианты?

Dima
26.09.2018
20:52:19
Здравствуйте хотел бы задать вопрос, какую ORM лучше использовать? Пробовал gorm, но криво создаются связи, думаю перейти на go-pg, стоит ли? Слышал ещё про reform)

Google

Pawel
26.09.2018
20:53:11
используйте reform. Я пока что ничего лучше не нашёл

Алексей
26.09.2018
21:34:49
Можно (лучше) вообще не использовать ORM.

Artem
26.09.2018
21:36:24
go-pg больше фич для postgres, чем у reform

Pawel
26.09.2018
22:01:38

Maksim
26.09.2018
22:03:11
только orm не про sql)

Алексей
26.09.2018
22:05:03
И никакого "раздражающего" SQL не будет.

Pawel
26.09.2018
22:08:25
Ну вот reform и есть такая кодогенерация, и пока что это потолок возможностей
сейчас пишу кодогенерацию clojure —> golang + sql, поскольку потолок низковат

Maksim
26.09.2018
22:13:12
orm - это orm. квери билдер - это квери билдер. дата маппер - это дата маппер.
писать в стиле "орм избавляет от sql болиерпринта" - круто, но к реальности отношения никакого не имеет


Dmitri
27.09.2018
02:11:47
моя позиция была такова: "сгенеренный код - это тоже код, но не исходный, потому-что его не человек писал. Исходным кодом считается только то, что писал человек или сопостовимый интеллект" основываясь на https://softwareengineering.stackexchange.com/a/361460
Тут есть маленький нюанс. В идеальном мире, концептуально, и много ещё каких слов с похожим смыслом - да, кодогенерация - часть билда. В реальности же билд-инструментарий го не различает рукописный код и сгенеренный, т.е. для имеющихся инструментов оба кода достаточно исходные. Я не говорю, что это однозначно верное архитектурное решение, но го - такая штука, где чистоту архитектуры принято местами приносить в жертву практичности. Поэтому можно бесконечно обсуждать, как оно должно быть в идеале (а оно туда придет, но на основании наработанных практик, а не абстрактных рассуждений), а можно признать, что кодогенерация и компиляция для го - раздельные ортогональные процессы, и в текущий момент в данном контексте сгенеренный код ровно такой же исходный. Это решит некоторое количество проблем на выходе.


Александр
27.09.2018
02:12:50
епт

Александр
27.09.2018
02:12:54
вы опять за старое?

Roman
27.09.2018
02:12:58
Тут есть маленький нюанс. В идеальном мире, концептуально, и много ещё каких слов с похожим смыслом - да, кодогенерация - часть билда. В реальности же билд-инструментарий го не различает рукописный код и сгенеренный, т.е. для имеющихся инструментов оба кода достаточно исходные. Я не говорю, что это однозначно верное архитектурное решение, но го - такая штука, где чистоту архитектуры принято местами приносить в жертву практичности. Поэтому можно бесконечно обсуждать, как оно должно быть в идеале (а оно туда придет, но на основании наработанных практик, а не абстрактных рассуждений), а можно признать, что кодогенерация и компиляция для го - раздельные ортогональные процессы, и в текущий момент в данном контексте сгенеренный код ровно такой же исходный. Это решит некоторое количество проблем на выходе.
я не говорил про компиляцию, я говорил про сборку проекта (build script). а это вещи разные


Dmitri
27.09.2018
02:16:39
Дык, билд-скрипт - вообще отдельный вопрос. Кому-то как раз левая автоматизация только мешает
Ему, в смысле

Olzhas
27.09.2018
03:08:02
ВИЛКА!

Nibbler
27.09.2018
03:23:30
бан надо

Anastaysha
27.09.2018
03:24:17
Спамер несчастный


Шарбану
27.09.2018
05:15:33
ТОО G1 Software Kazakhstan
Астана, улица Е-49, 7
Требуемый опыт работы: 1–3 года
Полная занятость, полный день
Что нужно делать:
В целом - писать проекты на Go
Участвовать в непосредственном проектировании архитектур для новых решений;
Писать лаконичный код, приправлять его хорошим количеством комментариев, а так же покрывать тестами. Главное - без фанатизма.
Что нужно знать и уметь:
Хорошее знание сетевых протоколов;
Опыт написания асинхронных веб-приложений с использованием REST, понимание принципов работы вебсокетов;
Опыт работы с PostgreSQL;
Знание Git.
Будет плюсом:
Опыт построения высоконагруженных систем;
Опыт работы с веб-фреймоворком Gin;
Понимание работы RPC (в частности опыт использования RPCX);
JIRA/Bitbucket/Confluence для вас не простой набор слов, который "вы видели где-то на Хабре";
Английский на уровне свободного чтения технической документации.
Что мы предлагаем:
Пятидневную рабочую неделю с 9.00 - 18.00;
Отличные возможности для профессионального роста и развития;
Динамичную и дружественную рабочую атмосферу в успешной команде;
Интересные и нестандартные проекты;
Достойный оклад на стабильной основе.

Google

Pavel
27.09.2018
05:20:26


Viktor
27.09.2018
05:21:47
Вилка?
Добрый конь, да красавица жена

Шарбану
27.09.2018
05:34:35
250-500 тыс тг
Извините, что не указали сразу

Olzhas
27.09.2018
05:35:26

Admin
ERROR: S client not available

Olzhas
27.09.2018
05:35:32
расходимся

Viktor
27.09.2018
06:17:54
Для Джуна норм

Olzhas
27.09.2018
06:20:16
Угу, июнь архитектуру будет проектировать

Alexander
27.09.2018
06:20:30
50к норм зп для первой работы в IT, но только если живешь в каких-то ебенях
хотя...
> казахстан
для них может и норм

Никита
27.09.2018
06:22:35

Alexander
27.09.2018
06:22:59

Viktor
27.09.2018
06:23:12
> джун
> 1-3 года
Стандартный период для джуна же. В большинстве вакух такой период подразумевает его

Анатолий
27.09.2018
06:23:47

Viktor
27.09.2018
06:23:51

Dmitriy
27.09.2018
06:24:08
хз как в мск, но для джуна после института в питере 50К хорошая з.п.

Alexander
27.09.2018
06:24:57

Google

Alexander
27.09.2018
06:25:14
или просмотра гайдов хауди

Viktor
27.09.2018
06:25:44

Dmitriy
27.09.2018
06:25:44
для любого который закончил институт и живет с мамкой

Viktor
27.09.2018
06:25:53
Это уже какие-то влажные фантазии пошли

Alexander
27.09.2018
06:28:59
я без выхи на 50к на испытательный срок пошёл во фронтенд, и это во Владивостоке
s/фронтенд/любая ёбань связанная с вебом/
и это я на первом же собесе отобрался
если быть попридирчевее, то можно тогда было и получше варианты найти
а так то ясен хер, что сейчас ставка в объявлениях на джунов пониженная, ибо развелось всяких выпускников гикбрейнса и зрителей хауди из-за хайпа вокруг IT
но если нормально себя показать сразу, то можно по нормальной ставке пойти

Dmitriy
27.09.2018
06:33:42

Alexander
27.09.2018
06:33:47
был некомерческий опыт полторы недели ))0

Dmitriy
27.09.2018
06:36:05
ну тут вариант либо у вы гений, либо у вас большой запас теоретических знаний, либо вам сильно повезло, либо вы что-то не договариваете.
но я предлагаю закончить этот разговор в этом чате. как бы не по теме совсем. если есть желание продолжить, то предлагаю переместится хотя бы в любой о работе

Alexander
27.09.2018
06:37:48
да не гений я, а дефолтный парень, который в IT пошёл не из-за денег, а из-за увлечения

Maruf
27.09.2018
06:55:40
Сорян