4.1 KiB
4.1 KiB
tdengine-mapper-go
Golang 的 struct 与 TDengine 表进行映射
一、简单使用
struct 标签
db : 表的列名, 值为 "" 或 "-" 表示忽略
taos : taos的标签,目前只有 [tag], 表示当前是 超级表的 TAG 字段
struct 接口
type SuperTableNamer interface {
SuperTableName() string // 获取超级表的表名 可选
}
type TableNamer interface {
TableName() string // 当前表的表名
}
TableNamer 是必须要实现的接口
SuperTableName 是可选实现的,如果没有 实现,就会当普通表进行处理
批量插入 -- 示例
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)
查询映射 -- 示例
// 如果没有结果,会返回 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 位于同一个目录
cd UserProject
go work init
go work add .
go work add ../tdengine-mapper-go
这样将会得到一个 go.work 文件
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 操作
# 查看现有 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 标签名
开始操作
// 先看下现在已经拥有的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