如何将数据结构与 Golang 中的数据库创建及其标签/标志绑定(bind)。

例如我有这个代码:

type User struct {
    ID      int     `sql:"primary_key;AUTO_INCREMENT"`
    Name    string  `sql:"type:varchar(100);unique"`
    Email   string  `sql:"type:varchar(100);unique"`
    Address string  `sql:"type:varchar(100)"`
}

创建应基于此结构的数据库时,我改为手动创建它,如下所示:
func (db *DB) CreateUserTable() (sql.Result, error) {

    statement := "CREATE TABLE IF NOT EXISTS %s (%s int, %s varchar, %s varchar, %s varchar)"
    return db.Exec(
        fmt.Sprintf(statement,
            "user",
            "id",
            "name",
            "email",
            "address",
        ),
    )
}

如何在数据库创建中绑定(bind)结构及其标签(主键、NULL 等)?。是否有不使用 ORM 库(gorm 等)的最佳实践?

最佳答案

您可以使用 reflect 检查结构并使用它来构建您的数据库查询。

例如:

如果要读取结构的名称以将其用作表名:

tableName := reflect.TypeOf(your-struct).Name()

如果要读取结构的属性,请使用以下命令循环并读取它:
val := reflect.ValueOf(your-struct)
for i:=0; i < val.NumField(); i++ {
    field := val.Type().Field(i)
    tag := field.Tag

    fieldType := field.Type // get struct's variable type
    fieldName := field.Name //get struct variable's name
    fieldByTag1 := tag.Get("your-tag") // get struct tag's name
    fieldByTag2 := tag.Get("your-another-tag") // get another struct tag's name(if you have more)
}

请注意,struct 的标签是反勾号内的标签 -> `

这就是您需要从结构中获取的全部内容。您应该在文档中探索更多。

关于sql - 在 Golang 中将结构与数据库创建绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49236330/

10-11 23:19