Golang中Gorm忽略字段的解决方法
Golang中Gorm忽略字段的解决方法
正在构建一个RESTful API,但无法在GORM中忽略列…当我使用 sql:"-" 或 gorm:"-" 时都不起作用。有人能提供提示吗?
1 回复
更多关于Golang中Gorm忽略字段的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在GORM中忽略字段有几种可靠的方法。以下是具体的解决方案和示例代码:
方法1:使用 gorm:"-" 标签(推荐)
确保标签正确放置在结构体字段上:
type User struct {
ID uint `gorm:"primaryKey"`
Name string
Email string
Password string `gorm:"-"` // 这个字段会被GORM忽略
CreatedAt time.Time
UpdatedAt time.Time
}
方法2:使用 sql:"-" 标签
type Product struct {
ID uint `gorm:"primaryKey"`
Name string
Price float64
InternalID string `sql:"-"` // 这个字段会被忽略
}
方法3:使用匿名字段
type BaseModel struct {
ID uint `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
}
type Order struct {
BaseModel
OrderNumber string
TotalAmount float64
TempData map[string]interface{} `gorm:"-"` // 临时数据,不存储到数据库
}
方法4:检查常见问题
确保没有其他标签冲突:
type Post struct {
ID uint `gorm:"primaryKey"`
Title string
Content string
// 错误的用法:多个标签冲突
// Author string `gorm:"column:author" gorm:"-"` // 这会出错
// 正确的用法
Author string `gorm:"-"` // 只使用忽略标签
}
完整示例
package main
import (
"gorm.io/gorm"
"gorm.io/driver/sqlite"
)
type User struct {
gorm.Model
Username string `gorm:"uniqueIndex"`
Email string
Password string `gorm:"-"` // 这个字段在数据库操作时会被忽略
Token string `sql:"-"` // 这个字段也会被忽略
}
func main() {
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
if err != nil {
panic("failed to connect database")
}
// 自动迁移
db.AutoMigrate(&User{})
// 创建用户时,Password和Token字段不会被保存到数据库
user := User{
Username: "john_doe",
Email: "john@example.com",
Password: "secret123", // 这个不会存入数据库
Token: "abc123", // 这个也不会存入数据库
}
db.Create(&user)
// 查询时,Password和Token字段会是零值
var result User
db.First(&result, user.ID)
// result.Password 和 result.Token 会是空字符串
}
如果这些方法仍然不工作,检查GORM版本和导入的包是否正确。确保使用的是最新版本的GORM,并且没有其他配置覆盖了标签行为。

