gorm仓库
https://github.com/go-gorm/gorm
官网
https://gorm.io/
创建项目
go mod初始化 go mod init gostudy2023
go mod tidy
登录mysql
登录mysql
mysql -u root -p1234
use test01;
select * from userinfo;
显示表
show tables;
gorm连接数据库
代码如下:
package main
import (
"log"
"os"
"time"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
LogLevel: logger.Info, // Log level
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
ParameterizedQueries: true, // Don't include params in the SQL log
Colorful: true, // Disable color
},
)
// refer https://github.com/go-sql-driver/mysql#dsn-data-source-name for details
// "用户名:密码@tcp(ip:端口)/数据库?charset=utf8mb4&parseTime=True&loc=Local"
dsn := "root:1234@tcp(127.0.0.1:3306)/test01?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
if err != nil {
panic(err)
}
// Migrate the schema
db.AutoMigrate(&Product{})
// Create
db.Create(&Product{Code: "D42", Price: 100})
}
代码解释
(1) 配置全局logger
(2) 打开数据库
(3) 定义结构体(参考gorm.io文档的预览tab页内容),使用AutoMigrate将go结构体同步到数据库表结构,注意在定义结构体时,默认需要添加一个参数gorm.Model
.
go gorm 的AutoMigrate什么作用
gorm
是一个Go语言的ORM(对象关系映射)库,用于方便地与关系型数据库交互。AutoMigrate
是gorm
提供的一个功能,用于自动迁移你的数据模型,基本上它将同步你的数据模型结构到实际的数据库表结构。
以下是AutoMigrate
的一些关键点:
-
创建表: 如果数据库中不存在该表,它会创建表。
-
不删除或更改现有列: 如果你的数据模型结构更改了(例如,删除或更改字段),
AutoMigrate
不会删除或更改数据库中的现有列或表。 -
新列自动添加: 如果你的数据模型中增加了新的字段,
AutoMigrate
会在数据库中的相应表上添加新的列。 -
索引、外键和其他约束: 除了基本的列之外,
AutoMigrate
还会创建在模型上定义的索引和外键。
下面是一个基本示例:
type User struct {
ID uint
Name string
Email string
}
db.AutoMigrate(&User{})
在上述示例中,gorm
会检查User
结构体,并确保数据库中存在相应的表和列。
但是,请注意以下几点:
AutoMigrate
不会删除不再使用的列。- 虽然
AutoMigrate
在开发过程中非常有用,但在生产环境中使用时需要谨慎,因为它可能导致数据丢失或不一致。
总之,AutoMigrate
是一个用于快速同步数据模型与数据库表结构的工具,但在部署到生产环境之前,建议仔细检查和测试迁移。