Files
tdengine-mapper-go/README.md
zhoujie 581b0b60eb feat: 补充了 readme.md 文件
1. 新增集成调试说明
2. 新增tag提交说明
2025-11-27 18:20:38 +08:00

4.1 KiB
Raw Blame History

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
    }
    def 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
    }
    def 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