Комментарии 14
Удобство как есть: помимо SQL ещё нужно знать, как завернуть GORM, чтобы получить тот же SQL.
По идее если нормальный ORM, то 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.
Object-Relational Mapping (ORM) в Golang