问题描述
报错代码如下
func GetSystemInfoSave() {
var sysInfo SystemInfo
db := variable.GormDbMysql.Table(dbSystemInfo)
err := db.AutoMigrate(&SystemInfo{})
if err != nil {
LogInfo("db err")
return
}
for {
sysInfo.CpuPercent = GetcpuPercent()
sysInfo.CpuCount, _ = cpu.Counts(true)
sysInfo.MemTotal = GetMemTotal()
sysInfo.MenUsed = GetMemUsed()
sysInfo.MemPercent = GetMemPercent()
sysInfo.DiskTotal = GetdiskTotal()
sysInfo.DiskUsed = GetdiskUsed()
sysInfo.DiskPercent = GetdiskPercent()
timeStr := time.Now().Format("2006-01-02 15:04:05")
sysInfo.CreatedTime = timeStr
sysInfo.UpdatedTime = timeStr
db.Create(&sysInfo)
time.Sleep(2 * time.Second)
}
}
报错信息如下
: Duplicate entry '95' for key 'PRIMARY' [14.649ms] [rows
:1] INSERT INTO `system_info` (`created_time`,`updated_time`,`cpu_percent`,`cpu_count`,`mem_total`,`men_used`,`mem_percent`,`disk_total`,`disk_used`,`disk_percent`,`id`) VALUES ('2023-03-26 00:19:00','2023-03-26 00:19:00',1.200000,1
2,24.000000,12.300000,51.000000,1155.000000,977.200000,84.600000,95)\n"}
问题解决
解决问题代码, 改变一行代码位置
将 var sysInfo SystemInfo 代码写入 for循环中, 分析原因是变量 gorm插入数据之后会返回 数据的id给变量systemInfo, 然而变量没被释放,导致再次插入数据报 重复的id错误问题
func GetSystemInfoSave() {
db := variable.GormDbMysql.Table(dbSystemInfo)
err := db.AutoMigrate(&SystemInfo{})
if err != nil {
LogInfo("db err")
return
}
for {
var sysInfo SystemInfo
sysInfo.CpuPercent = GetcpuPercent()
sysInfo.CpuCount, _ = cpu.Counts(true)
sysInfo.MemTotal = GetMemTotal()
sysInfo.MenUsed = GetMemUsed()
sysInfo.MemPercent = GetMemPercent()
sysInfo.DiskTotal = GetdiskTotal()
sysInfo.DiskUsed = GetdiskUsed()
sysInfo.DiskPercent = GetdiskPercent()
timeStr := time.Now().Format("2006-01-02 15:04:05")
sysInfo.CreatedTime = timeStr
sysInfo.UpdatedTime = timeStr
db.Create(&sysInfo)
time.Sleep(2 * time.Second)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)