
自己写了一个 golang aspect 面向切面的项目,
地址是这里 https://github.com/Justice-love/go-aspect , 求 star.
实现的效果如下图:

1 dcalsky 2021-06-03 14:21:56 +08:00 虽然简单,但是依然闻到了 spring 的恶臭。 |
2 qfdk PRO 想法不错啊,回头看看,但是 这样不又是回到 spring 了么 ? |
3 justicelove OP @qfdk #2 spring 的代表是 IOC 依赖注入, 切面是 spring 之外也独立存在的 |
4 qfdk PRO @justicelove #3 记得这一套 打印日志特别好用。 已经远离很久了 |
8 generic 2021-06-03 16:32:50 +08:00 一边 if err!=nil 一边玩这种魔法吗?风格上完全两个极端啊... |
9 wdlth 2021-06-03 22:27:59 +08:00 这个是参考 aspectj 那种吧,编译期织入的。 |
10 justicelove OP @wdlth #9 是的 |
11 xx6412223 2021-06-04 10:00:04 +08:00 @justicelove 是在 编译前对文件进行插入文本吧。怎么是编译器织入? |
12 justicelove OP @xx6412223 #11 没有说是编译器织入, 只是需要使用其他的指令来代替 go build 进行编译 |
13 qianxiaoxiao 2021-06-07 11:58:30 +08:00 spring 的恶趣味 |
14 fumeboy 2021-07-10 17:21:00 +08:00 最近也在思考怎么在 go 实现 AOP 。我的倾向是 我编写业务代码,用 gen 工具生成增强后的函数,函数签名一致。 比如 ```go // +build dev func proc1() (err error) { a, err := proc2() b, err := proc3() if a + b == 3 { metrcisAt3() } return } ``` 增强为 ```go // +build !dev func proc1() (err error) { logAtStart() a, err := proc2() if err != nil{ logAtErr() return err } b, err := proc3() if err != nil{ logAtErr() return err } if a + b == 3 { metrcisAt3() } return } ``` |
16 justicelove OP @fumeboy #14 使用这种 tag 做隔离,好处是直观可控,坏处也就是对开发人员的要求比较高 |