必须先定义带xorm标签的结构体、初始化引擎并Ping验证连接、设置表名与字段映射规则,再调用Sync2同步建表;漏掉任一环都会导致表不创建或字段错乱。

要用XORM框架在Go项目中完成从零建表的完整流程,必须先定义结构体、初始化引擎、设置映射规则、再调用同步方法生成表——漏掉任何一环都会导致表不创建或字段错乱。
定义带xorm标签的结构体
新建一个User结构体,字段名用驼峰,每个字段必须加xorm标签声明数据库行为:主键、自增、非空、类型、默认值、时间自动填充等。例如:
type User struct {<br> Id int64 `xorm:"pk autoincr"`<br> Name string `xorm:"varchar(50) notnull"`<br> Age int `xorm:"int default 0"`<br> CreatedAt time.Time `xorm:"created"`<br> UpdatedAt time.Time `xorm:"updated"`<br>}
注意:【Id字段必须带pk autoincr,否则Sync2不会识别为主键,也无法触发自增】;created和updated是特殊关键字,不需要手动赋值,XORM会在插入/更新时自动写入当前时间。
初始化XORM引擎并测试连接
使用xorm.NewEngine传入数据库驱动名和DSN字符串创建引擎实例,DSN格式为用户名:密码@tcp(地址:端口)/数据库名?charset=utf8mb4:
engine, err := xorm.NewEngine("mysql", "root:123456@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4")<br>if err != nil {<br> panic(err)<br>}
引擎创建后并不会立即连库,必须显式调用engine.Ping()验证连通性。这一步不能跳过——如果网络不通或账号错误,Sync2会静默失败,只报“no such table”之类误导性错误。
设置表名与字段映射规则
方法一:使用默认SnakeMapper(推荐新手)
不做任何设置即启用,结构体UserName→字段user_name,UserProfile→user_profile,表名User→user。
方法二:强制指定表名为users(绕过默认映射)
在结构体中添加TableName()方法:func (User) TableName() string { return "users" }。
这样无论映射规则如何,表名始终固定为users。
方法三:全局前缀统一管理
若所有表都要加app_前缀,用names.NewPrefixMapper包装:tbMapper := names.NewPrefixMapper(names.SnakeMapper{}, "app_")<br>engine.SetTableMapper(tbMapper)。
此时User结构体将映射到app_user表。
执行建表操作
第一步:确保目标数据库testdb已存在,XORM不会自动创建数据库。
第二步:调用Sync2同步结构体到数据库:err := engine.Sync2(new(User))<br>if err != nil {<br> log.Fatal(err)<br>}
Sync2是阻塞操作,成功则表立即生成;失败会返回具体SQL错误(如字段类型不支持、权限不足)。【该操作会修改数据库结构,生产环境严禁直接调用】。
第三步:验证建表结果
进入MySQL执行DESC users;,确认字段名、类型、约束与结构体标签完全一致——特别是id是否为INT(11) PK AI,created是否为DATETIME且有DEFAULT CURRENT_TIMESTAMP。


















