Как стать автором
Обновить

Комментарии 14

Удобство как есть: помимо SQL ещё нужно знать, как завернуть GORM, чтобы получить тот же SQL.

По идее если нормальный ORM, то SQL знать не обязательно.

В нашей профессии трудно устроиться на бекенд без знания SQL.

Разработчика GO не берут если он не знает SQL?

Я не видел вакансий, где для backend-разработчика не требовали знание SQL.

Только на джун позиции бэкэндеров

мидл и выше обязан знать SQL

А зачем джун, если он не знает базовую вещь, как SQL? Он же все равно будет бесполезен

Под знанием я имею опыт эксплуатации и проектирования. У джуна его не будет по умолчанию.

Я пробовал, мне не понравилось. Во-первых, множество каких-то совершенно неинтуитивных функций. Во-вторых, как оказалось, gorm в некоторых случаях работает в 10 раз медленнее чем прямые sql запросы. И конструировать сложные запросы (к примеру содержащие пагинацию, фильтрацию по нескольким критириям и сортировку, причем всё опционально) куда проще с помощью обычной строки с sql кодом.

И сам gorm мне был нужен только ради автомиграции, но оказалось что и она там слишком примитивная, умеет только новые столбцы добавлять.

Нашел такую штуку как sqlx - легкая обертка над стандартным пакетом sql, умеющая связывать результаты запросов со структурами.

Вместо такого

tx := db.Begin()
defer func() {
    if r := recover(); r != nil {
        tx.Rollback()
    }
}()

удобнее делать так

tx := db.Begin()
defer tx.Rollback()

Так мы заставляем программиста вызвать Commit() иначе весь код откатится в Rollback() причем не важно из-за паники или просто из-за случайного return.

Ну такое, неявный коммит как-то не очень хорошо по-моему. Я бы в коде такое не хотел. Одно дело когда у вас обертка ExecTx() и понятно что внутри будет, другое когда вы прямо в код лепите такой дефер.

Это и есть обертка

В RunTx передается функция которая выполняется в транзакции

Да я понимаю. Но мой комментарий был про наружное использование defer-rollback, без оберток. В обертке понятно что коммит необходим. Я решил что вы предлагаете пихать defer commit() в обычные куски кода.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий