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

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

|
dcalskyJun 3, 2021
1
虽然简单,但是依然闻到了 spring 的恶臭。
|
|
2
想法不错啊,回头看看,但是 这样不又是回到 spring 了么 ?
|
|
3
@qfdk #2 spring 的代表是 IOC 依赖注入, 切面是 spring 之外也独立存在的
|
|
4
@justicelove #3 记得这一套 打印日志特别好用。 已经远离很久了
|
|
dushixiangJun 3, 2021
6
@lostSoul 因为在有些人眼里 Java 就是原罪。
|
|
genericJun 3, 2021
8
一边 if err!=nil 一边玩这种魔法吗?风格上完全两个极端啊...
|
|
wdlthJun 3, 2021
9
这个是参考 aspectj 那种吧,编译期织入的。
|
|
10
@wdlth #9 是的
|
|
xx6412223Jun 4, 2021
11
@justicelove 是在 编译前对文件进行插入文本吧。怎么是编译器织入?
|
|
12
@xx6412223 #11 没有说是编译器织入, 只是需要使用其他的指令来代替 go build 进行编译
|
|
qianxiaoxiaoJun 7, 2021
13
spring 的恶趣味
|
|
fumeboyJul 10, 2021
14
最近也在思考怎么在 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
@fumeboy #14 使用这种 tag 做隔离,好处是直观可控,坏处也就是对开发人员的要求比较高
|