为什么在像gorm这样的go libs中使用struct中的sql标签?

sh0*_*mik 11 sql go go-gorm

我知道golang中struct的标签的必要性以及如何通过golang中的reflect来访问它.但是我已经搜索过了,并且在为sql结果编写struct时为什么我应该在struct中使用sql标签的问题找不到可靠的答案.我已经探索了许多示例代码,人们正在使用sql:"index"struct和sql:"primary_key"struct.

现在我已经在数据库层完成了索引,这还不够吗?我是否应该使用sql:"index"得到最好的结果?像这样我已经在数据库中定义了主键属性,我是否也必须指定sql:"primary_key"

没有那些我的代码似乎工作正常.只是想知道他们的好处和用法.

Eze*_*eno 7

我想你指的是像gorm这样的ORM库

在这种情况下,元数据类似sql:"primary_key"sql:"index"将只是告诉ORM在尝试设置表时创建索引或者可能会迁移它们.

gorm中的几个示例可能是:索引,主键,外键,many2many关系,或者在尝试将现有模式调整到gorm模型时,明确设置类型,例如:

type Address struct {
    ID       int
    Address1 string         `sql:"not null;unique"` // Set field as not nullable and unique
    Address2 string         `sql:"type:varchar(100);unique"`
    Post     sql.NullString `sql:"not null"`
}
Run Code Online (Sandbox Code Playgroud)

  • 此外,对于许多非ORM库(例如[sqlx](https://github.com/jmoiron/sqlx)),struct标签用于将列名映射到struct字段 - 例如,源中的`EmailAddress`您的数据库中的`email_address`. (2认同)