GORM — это элегантная платформа ORM (реляционного сопоставления объектов) для языка Go. Он поддерживает основные базы данных SQL, такие как MySQL, PostgreSQL и т. д., и предоставляет интуитивно понятный API для работы с базой данных. С помощью GORM разработчики могут работать с базой данных в виде объектов без написания длинных операторов SQL.
Печать операторов SQL помогает:
Следующие шаги объясняют, как настроить GORM для печати операторов SQL:
Сначала убедитесь, что GORM и его пакет логгера импортированы:
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
"gorm.io/gorm/logger"
)
Подключитесь к вашей базе данных и инициализируйте GORM:
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
Создайте новый регистратор и настройте его параметры:
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second,
LogLevel: logger.Info,
Colorful: true,
},
)
db, err = db.WithContext(context.Background()).Set("gorm:logger", newLogger).Open(mysql.Open(dsn), &gorm.Config{})
3.4 Пример запроса
Теперь мы можем выполнить запрос, и фактический SQL-код будет выведен на консоль:
var user User
db.Find(&user, 1)
Вот полный пример кода:
package main
import (
"gorm.io/gorm"
"gorm.io/driver/mysql"
"gorm.io/gorm/logger"
"log"
"os"
"time"
)
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags),
logger.Config{
SlowThreshold: time.Second,
LogLevel: logger.Info,
Colorful: true,
},
)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
if err != nil {
panic("failed to connect database")
}
var user User
db.Find(&user, 1)
}
Использование GORM для печати фактически выполненных операторов SQL — это мощная функция, которая может помочь разработчикам лучше понять и оптимизировать операции с базой данных. Я надеюсь, что эта статья предоставит вам достаточную помощь для реализации этой функции в вашем собственном проекте. Если у вас есть какие-либо вопросы или вам нужны дополнительные объяснения, пожалуйста, оставьте сообщение!