# tdengine-mapper-go > Golang 的 struct 与 TDengine 表进行映射 ## 一、简单使用 ### struct 标签 ``` db : 表的列名, 值为 "" 或 "-" 表示忽略 taos : taos的标签,目前只有 [tag], 表示当前是 超级表的 TAG 字段 ``` ### struct 接口 ```go type SuperTableNamer interface { SuperTableName() string // 获取超级表的表名 可选 } type TableNamer interface { TableName() string // 当前表的表名 } ``` `TableNamer` 是必须要实现的接口 `SuperTableName` 是可选实现的,如果没有 实现,就会当普通表进行处理 ### 批量插入 -- 示例 ```go type User struct { Name string `db:"name" taos:"tag"` Age int `db:"age"` } func (u *User) TableName() string { return "user_" + u.Name } func (u *User) SuperTableName() string { return "super_user" } func TestSimpleInsert(t *testing.T) { tdMapper := NewMapper() data := []any{ &User{Name: "张三", Age: 18}, &User{Name: "李四", Age: 20}, } insertSql, err := tdMapper.ToInsertSQL(data...) if err != nil { t.Fatal(err) } fmt.Println(insertSql) } ------------------------------------------------------ INSERT INTO `user_张三` USING `super_user` (`name`) TAGS ('张三') (`age`) VALUES (18) `user_李四` USING `super_user` (`name`) TAGS ('李四') (`age`) VALUES (20) ``` ### 查询映射 -- 示例 ```go // 如果没有结果,会返回 sql.ErrNoRows func QueryOne(db *sql.DB) (*User,error){ tdMapper := NewMapper() rows,err:=db.Query("select * from User limit 100") if err!=nil { return err } defer rows.Close() var user User if err:=ScanRows(&user,rows);err!=nil { return err } return &user, nil } // 如果查询结果数量为0,不会返回错误 func QueryAll(db *sql.DB)([]*User, error) { tdMapper := NewMapper() rows,err:=db.Query("select * from User limit 100") if err!=nil { return err } defer rows.Close() var users []*User if err:=ScanRows(&users,rows);err!=nil { return err } return &users, nil } ``` ## 二、嵌入其他项目调试 ### 源码集成调试 例如 想要在 UserProject 中进行调试 我们可以使用 go wrok 来集成 现在 tdengine-mapper-go 和 UserProject 位于同一个目录 ```text cd UserProject go work init go work add . go work add ../tdengine-mapper-go ``` 这样将会得到一个 go.work 文件 ```text go 1.24.10 use ( . ../tdengine-mapper-go ) ``` 接下来 就可以直接在 UserProject 修改 tdengine-mapper-go中的源码了,当然在 tdengine-mapper-go 项目中直接修改也是可以的 #### 善后 调试完成后,在 tdengine-mapper-go 将代码提交 删除 UserProject 中的 go.work 文件 ## 三、打标签提交 在其他项目中使用,实际上拉去的是 tdengine-mapper-go 标签版本,也就是说当我们完成之后,只是提交了 master 分支还不够,必须要将代码打上版本标签才然后推送出去,别人才能拉去到项目。 现在在假设你已经完成了代码的提交。 **git tag 操作** ```bash # 查看现有 tag git tag # 展示所有tag git tag -n # 展示tag和提交信息 git show 标签名 # 查看某个 tag # 创建 tag git tag -a '版本号' -m '提交信息' # 打标签 git tag -am '提交信息' 版本号 # tag 重命名 git tag 老标签名 新标签名 git tag -d 老标签名 # 推送 tag git push origin 标签名 # 推送单个 tag git push origin --tags # 推送全部 tag # 删除 tag git tag -d 标签名 # 本地删除 tag git push origin --delete 标签名 # 远程删除 tag # 检出 tag git checkout -b 分支名称 标签名 git checkout 标签名 ``` 开始操作 ```bash // 先看下现在已经拥有的tag标签 $ git tag v0.0.1 v0.0.2 v0.0.3 v0.0.4 v0.0.5 v0.0.6 v0.0.7 v0.0.8 v0.0.9 v0.1.0 // 命名新的tag标签 并写上标签的 说明 // 比如提交内容是这样的: // 1. 补充了 readme.md 上的调试说明 // 2. 修复了空指针的 BUG $ git tag -a 'v0.1.1' -m "1. 补充了 readme.md 上的调试说明 2. 修复了空指针的 BUG" // 验证 查看 tag 信息 git show v0.1.1 // 然后推送到服务器 $ git push origin v0.1.1 ```