go语言有类似注解的东西吗_GitHub - handsomestWei/go-annotation: golang 注释实现类似java的注解机制。基于ast语法解析和monkey动态代理。目前实现...

该博客介绍了如何在Go语言中通过注释实现类似Java的注解机制,利用AST语法解析和Monkey动态代理来处理事务。示例展示了在DAO层使用`@Transactional`注释的方法,自动进行事务管理,无需额外编写事务代码。文章还提到了事务管理器的启动和DAO对象的注册,并指出Go语言无法直接实现Java的`Class.forName()`,需要显式传递DAO对象。
摘要由CSDN通过智能技术生成

go-annotation

golang 使用注释实现类似java的注解机制。基于ast语法解析和monkey动态代理。目前实现@Transactional的demo

Usage

在DAO层使用//@Transactional注释标记目标方法。自动实现事务处理,不用额外编写事务处理代码。

type ExampleDao struct {

}

func (e *ExampleDao) Select() (bool, error) {

return true, nil

}

//@Transactional

func (d *ExampleDao) Update(s *xorm.Session, param string) (bool, error) {

return true, nil

}

//@Transactional

func (d *ExampleDao) Delete(s *xorm.Session) (bool, error) {

return false, nil

}

事务管理器TransactionManager启动,遍历go文件,获取被指定注释标记的包名.接收者名.方法名

目前无法实现类似java的Class.ForName("class full name")字符串转对象,只能显式调用RegisterDao方法传入

编译时需禁用内联go build -gcflags=-l

// go build -gcflags=-l main.go

// main

func main() {

scanPath := `xxx\github.com\handsomestWei\go-annotation\example`

// 初始化事务管理器,扫描指定包路径,代理DAO对象

transaction.NewTransactionManager(transaction.TransactionConfig{ScanPath: scanPath}).RegisterDao(new(example.ExampleDao))

dao := new(example.ExampleDao)

dao.Select()

// 事务自动开启。处理成功将自动提交和关闭事务,处理失败将自动回滚事务

dao.Update(new(xorm.Session), "")

dao.Delete(new(xorm.Session))

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值