如何将数据结构与 Golang 中的数据库创建及其标签/标志绑定。
例如我有这个代码:
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)"`
}
Run Code Online (Sandbox Code Playgroud)
创建应基于此结构的数据库时,我改为手动创建它,如下所示:
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",
),
)
}
Run Code Online (Sandbox Code Playgroud)
如何在数据库创建中绑定结构体及其标签(主键、NULL等)?是否有不使用 ORM 库(gorm 等)的最佳实践?
您可以使用Reflect来检查该结构并使用它来构造数据库查询。
例如:
如果您想读取结构体的名称以将其用作表名:
tableName := reflect.TypeOf(your-struct).Name()
Run Code Online (Sandbox Code Playgroud)
如果您想读取结构体的属性,请使用以下命令循环并读取它:
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)
}
Run Code Online (Sandbox Code Playgroud)
请注意,结构体的标签是反勾号内的标签 -> `
这就是您需要从结构中获取的全部内容。您应该在文档中探索更多内容。