代码:
package main
import (
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func ConnectDB() (*gorm.DB, error) {
dsn := "root:root@tcp(127.0.0.1:3306)/ceshi?charset=utf8mb4&parseTime=True&loc=Local"
// 根据实际的用户名、密码、主机地址、端口号、数据库名修改dsn
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
return db, err
}
type User struct {
gorm.Model
NAME string
Email string
}
func main() {
db, err := ConnectDB()
if err != nil {
panic("无法连接数据库")
}
// 自动迁移,确保数据库表结构与结构体一致
//db.AutoMigrate(&User{})
// 创建一个用户实例并插入数据库
user := User{NAME: "John", Email: "john@example.com"}
result := db.Create(&user)
if result.Error != nil {
fmt.Println("插入失败:", result.Error)
return
}
fmt.Printf("插入成功,用户 ID: %d\n", user.ID)
// 查询
/* var users []User
result := db.Find(&users)
if result.Error == nil {
// 遍历查询到的多条记录
for _, u := range users {
fmt.Printf("用户信息:%+v\n", u)
fmt.Println(u.Email)
}
} */
}
说明: 创建结构体和开启自动迁移后,go可自动创建表,非常方便和规范。每次查询前需要定义一个结构体的切片类型,在查询中调用地址。