首先通过以下命令安装GORM包
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
接下来以 SQLite 数据库为例
- 连接数据库:
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"log"
)
func main() {
// 连接数据库
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 迁移数据库(创建表)
db.AutoMigrate(&User{})
}
- 定义数据模型:
package main
import (
"gorm.io/gorm"
)
type User struct {
gorm.Model
Name string
Email string
}
- 增加数据:
func createUser(db *gorm.DB, name, email string) {
user := User{Name: name, Email: email}
result := db.Create(&user)
if result.Error != nil {
log.Println("Error creating user:", result.Error)
}
}
- 查询数据:
func getUserByID(db *gorm.DB, id uint) (User, error) {
var user User
result := db.First(&user, id)
if result.Error != nil {
return User{}, result.Error
}
return user, nil
}
func getAllUsers(db *gorm.DB) ([]User, error) {
var users []User
result := db.Find(&users)
if result.Error != nil {
return nil, result.Error
}
return users, nil
}
- 更新数据:
func updateUser(db *gorm.DB, id uint, newName string) error {
var user User
result := db.First(&user, id)
if result.Error != nil {
return result.Error
}
user.Name = newName
result = db.Save(&user)
if result.Error != nil {
return result.Error
}
return nil
}
- 删除数据:
goCopy code
func deleteUser(db *gorm.DB, id uint) error {
var user User
result := db.Delete(&user, id)
if result.Error != nil {
return result.Error
}
return nil
}
最后,在 main 函数中测试上述的增删改查操作:
func main() {
// ... 连接数据库等代码 ...
createUser(db, "Alice", "alice@example.com")
user, err := getUserByID(db, 1)
if err != nil {
log.Println("Error getting user:", err)
} else {
log.Println("User:", user)
}
users, err := getAllUsers(db)
if err != nil {
log.Println("Error getting users:", err)
} else {
log.Println("All users:", users)
}
err = updateUser(db, 1, "Alicia")
if err != nil {
log.Println("Error updating user:", err)
}
err = deleteUser(db, 1)
if err != nil {
log.Println("Error deleting user:", err)
}
}