Andrey
Если уж заговорили о поддержке...
Andrey
Есть точка зрения, что о ней стоит задумываться только если проект живет больше года
Andrey
Менее этого срока - экономически не обосновано
Andrey
Ну и вообще, у вас еще ничего нет, а вы уже думаете как это оптимизировать
Slava
то есть до года ты будешь сам фиксить баги в библиотеках, которые используешь? =)
Andrey
Так не работает
Slava
никто так не делает
🎉
Вопрос не в проекте, а в базе. То есть есть у тебя базовый веб-серв, и к примеру приспичило что-то на нём поднять, SPA или ЖЖ новый нафигачить. То есть некая заготовка, которую всегда можно сделать go get.
Slava
это правда, работать я не люблю =)
Slava
люблю когда за меня работают другие, фиксят баги в своих библиотеках =)
Andrey
Странно, из ваших докладов я вынес другой вывод
Andrey
Кстати, спасибо за них.
Kirill
Будет 2.0 - из коробки by default заюзаешь, а пока вот так
heavycharged
А если на фронте стоит Nginx и проксирует на Go, то он HTTP2 проксирует?
heavycharged
TLS хендшейки?
Kirill
ELB жи
heavycharged
они же быстрее там, и на сколько они кешируются?
heavycharged
эм, без понятия что это
heavycharged
это амазоновская приблуда?
Kirill
AWS ELB
Sebor▂▅▇█▓▒░
Не все в aws живут
Kirill
ССЗБ
Sebor▂▅▇█▓▒░
Странный вывод
heavycharged
Ну это зависит от масштабов приложения, если оно не такое большое, то балансировщик не нужен. Да и Амазон как уже сказали не все юзают. Я думаю если речь идет о балансировщике и нагрузках, то статику и обслуживание коннектов отдают на nginx.
Kirill
Странный вывод
Аналоги есть у многих
Sebor▂▅▇█▓▒░
Аналоги есть у многих
Это понятно, но опять же, не все хостятся в облаках
Kirill
Но там main execution path почти весь на асме
Kirill
(просто потому что я извращенец и люблю писать на асме)
Alexei
хз, как http2, но наши спецы на прошлой неделе завели ws через кучу всяких nginx и h**proxy
heavycharged
как то можно отдебажить SQL запрос? написал его, подставляю в плейсхолдеры а результат пустой, ошибок нет, ничего нет. пишу через прогу прямо к базе запрос - все отлично.
Alexei
В го же есть некое подобие query builder'ов
Alexei
там залогировать и все
heavycharged
да я уже без query_builder начал писать, и без ORM
heavycharged
но чую я что напрасно
heavycharged
уже намучался с этими scanRow
Alexei
pgsql?
heavycharged
нет, MySQL
heavycharged
rows, err := db.Query(`SELECT c.id, c.name, c.slug FROM city c INNER JOIN state s ON c.state_id = s.id WHERE s.slug = ? ORDER BY c.name LIMIT ?`, stateSlug, len(*c)) if err != nil { return err } defer rows.Close()
heavycharged
сори за жесть с форматированием, телеграм все перекурочил
heavycharged
все, снимаю вопрос, надо cap(*c)
heavycharged
дурень))
Alexei
ну пофиг, ОРМ хорош на старте, но потом начинаешь оптимизировать и если все ОРМ-е - это очень больно, я, как пришел, сразу с ОРМа проект перевел на запросы, на прошлой неделе функция выполнялась около 40 секунд, на тестовых данных, если бы ОРМ остался, так и было бы, взли и переписал запрос в 60 строк SQL кода, и выполняется почти моментально
heavycharged
да я тоже люблю нативный сырой SQL, но у меня тут запросы в разных разрезах, и так и сяк, куча вычисляемых свойств, и в итоге под каждое чтоли структуру городить?
heavycharged
или делать в структуре calculated map[string]interface{}
Alexei
Пиши функции отдельные
heavycharged
ну вот допустим, есть выборка топовых городов, но там разные orderBy, например население, и т.д. и т.п., выносить это в аргумент функции?
heavycharged
Я хочу оставить так, но у меня уже потихоньку начинается дублирование этих запросов, что меня напрягать начинает (
Alexei
декомпозировать в один запрос с переменными, а в фнукциях делать вызов функции с аргументами
heavycharged
Окей, это более менее просто, а вот как быть допустим с LIMIT? Как мне всучить его в запрос, и при этом в зависимости от того, есть он или нет, передать как параметр? Делать что-то вроде слайса, и потом его через три точки ... в Query?
heavycharged
или можно как-то через препейред, что-то вроде if limit != 0 { stmt.Bind(limit) }
heavycharged
сори за возможно тупые вопросы)
Alexei
ну точки в квери - это слайс, по сути, можешь сделать функцию: например: func someFunc(where string, limitarg sting, args ...interface{} и использовать ее. взапросе примерно так: query := fmt.Sprintf("some query where %s %s", where, limit) db.Query(quert, args...); err != nil .....
heavycharged
спасибо, надо как-то унифицировать это дело попытаться. я сейчас придумал так: make([]City, 0, 100), а capacity это у нас LIMIT получается, но что-то мне подсказывает что решение - бред))
Alexei
старайся не использовать make это просто так, совет...
Alexei
в смысле, &SomeStruct{...} - лучше
Alexei
кхм, ты начинаешь понимать суть го ))))))
Wingman
:D
Wingman
Орм позволяет забыть об этом
Wingman
А сложные запросы никто не мешает руками оптимизировать
Alexei
это не дыра, это SQL injection, что еще хуже, но я утрировал, сделай так, чтобы было норм
Alexei
с другой стороный - используй ORM, Энакин и многие другие ушли на темную сторону... )))))
Wingman
это не дыра, это SQL injection, что еще хуже, но я утрировал, сделай так, чтобы было норм
Ну я и имел в виду иньекцию) А "сделай норм" - всего 2 варианта: 100500 раз переписывать в каждом месте код проверок и экранирования, или... Писать свой недоорм)
Alexei
да можно булом в функции огранизовать, как я тебя понимаю
Илья
старайся не использовать make это просто так, совет...
ну и советы у вас, с вами даже go vet несогласен
heavycharged
Такс, решил все таки натянуть ORM, так как сроки жмут, а писать SQL запросы уже устал, куча выборок в разных разрезах. Выбор пал на gorm. Суть вопроса.. есть type City struct { ID uint Name string // .... StateID uint State State } type State struct { ID uint Name string } Если я выбираю одну запись, то делаю как-то так: db.Model(&city).Related(&state) А что делать, если городов целая куча, related то я не могу указать?
heavycharged
Использую горм больше года, учи sql, чувак
я знаю как это сделать на SQL))
Aleksandr
с чего ты взял что с ORM ты быстрее напишешь, если уже вопрос возник?)
heavycharged
Нужен Conditional preload
Conditional Preload это где IN
heavycharged
это ж не то
heavycharged
мне нужно просто SELECT a, b, c, d, ... FROM city INNER JOIN state ON state.id = city.state_id и чтобы scanRows делался в структуру которая внутри city
Nikita
Table("city").Select("a, b , c d").Join("INNER JOIN state ON ...").Limit(1).Find(&result)
heavycharged
Table("city").Select("a, b , c d").Join("INNER JOIN state ON ...").Limit(1).Find(&result)
LIMIT мне как раз не нужен, этот запрос выше я написал уже, только чуть по другому