为什么在gorm这样的go LIB中使用struct中的sql标记?

为什么在gorm这样的go LIB中使用struct中的sql标记?,sql,go,go-gorm,Sql,Go,Go Gorm,我知道golang中struct中标签的必要性,以及如何通过golang中的reflect访问它。但是我已经搜索过了,没有找到一个可靠的答案来回答为什么在为sql结果编写struct时应该在struct中使用sql标记的问题。我研究了许多示例代码,人们在结构中使用了sql:“index”,在结构中使用了sql:“primary\u key” 现在我已经在数据库层做了索引,这还不够吗?我是否也必须使用sql:“index”才能获得最佳结果?像这样,我已经在数据库中定义了主键属性,我是否也应该指定s

我知道golang中struct中标签的必要性,以及如何通过golang中的reflect访问它。但是我已经搜索过了,没有找到一个可靠的答案来回答为什么在为sql结果编写struct时应该在struct中使用sql标记的问题。我研究了许多示例代码,人们在结构中使用了
sql:“index”
,在结构中使用了
sql:“primary\u key”

现在我已经在数据库层做了索引,这还不够吗?我是否也必须使用
sql:“index”
才能获得最佳结果?像这样,我已经在数据库中定义了主键属性,我是否也应该指定
sql:“primary\u key”


没有这些,我的代码似乎工作得很好。我只是想知道它们的优点和用法。

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

在这种情况下,像
sql:“primary_key”
sql:“index”
这样的元数据只会告诉ORM在尝试设置表或迁移表时创建索引

中的两个示例可能是:索引、主键、外键、许多关系,或者在尝试将现有模式调整到模型中时,显式设置类型,例如:

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"`
}

您在哪里看到这个示例代码?大多数ORM都在使用它。除此之外,对于许多非ORM库(例如),结构标记用于将列名映射到结构字段,例如,源代码中的
EmailAddress
映射到数据库中的
email\u address
。具有gorm和默认值的自动递增唯一id字段存在问题。简单地说就是不要在插入行时工作。