1、安装 GORM 和 MySQL 驱动
新版本库是gorm.io/gorm
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
2、连接 MySQL 数据库
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
)
func main() {
// 数据源名称 (DSN) 格式:username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local
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 {
log.Fatalf("failed to connect database: %v", err)
}
log.Println("Connected to the MySQL database successfully.")
}
请根据实际情况替换 dsn 中的 user, password, 127.0.0.1:3306, dbname
3、定义模型
定义一个简单的模型,例如 Product,用于映射到数据库表。
type Product struct {
gorm.Model
Code string
Price uint
}
这里的 gorm.Model 包含了 ID、CreatedAt、UpdatedAt 和 DeletedAt 字段。
4、完整示例
package main
import (
"log"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatalf("failed to connect database: %v", err)
}
log.Println("Connected to the MySQL database successfully.")
// 自动创建或迁移表
db.AutoMigrate(&Product{})
// 创建
product := Product{Code: "D42", Price: 100}
result := db.Create(&product)
if result.Error != nil {
log.Fatalf("Failed to create record: %v", result.Error)
} else {
log.Printf("Created product with ID: %d", product.ID)
}
// 查询
var retrievedProduct Product
if err := db.First(&retrievedProduct, 1).Error; err != nil {
log.Printf("Product not found: %v", err)
} else {
log.Printf("Found product: %+v", retrievedProduct)
}
// 更新
product.Price = 150
result = db.Save(&product)
if result.Error != nil {
log.Fatalf("Failed to update record: %v", result.Error)
} else {
log.Printf("Updated product: %+v", product)
}
// 删除
result = db.Delete(&product)
if result.Error != nil {
log.Fatalf("Failed to delete record: %v", result.Error)
} else {
log.Printf("Deleted product with ID: %d", product.ID)
}
}